我有一个SQL Server表,其中包含字段:id, city, country
。我从Excel文件导入了此表,所有内容都已成功导入,但id
字段未按编号排序。我使用的工具导入了一些随机数的行。
我应该使用哪种更新命令从SQL Server Management Studio Express重新订购我的ID?
答案 0 :(得分:0)
只需使用select语句的部分顺序来订购它们。
答案 1 :(得分:0)
您的桌面上是否有主键和聚簇索引?如果不是,id
是主键的良好候选者,当您创建主键时,它将成为聚簇索引。
假设这是你的表
create table CityCountry(id int, city varchar(10), country varchar(10))
你添加这样的数据。
insert into CityCountry values (2, '2', '')
insert into CityCountry values (1, '1', '')
insert into CityCountry values (4, '4', '')
insert into CityCountry values (3, '3', '')
select * from CityCountry
的输出将是
id city country
----------- ---------- ----------
2 2
1 1
4 4
3 3
作为主键的列不能接受空值,因此首先必须执行
alter table CityCountry alter column id int not null
然后您可以添加主键
alter table CityCountry add primary key (id)
当你select * from CityCountry
时,你得到了
id city country
----------- ---------- ----------
1 1
2 2
3 3
4 4
答案 2 :(得分:0)
如果我理解正确,你希望所有id都有连续的数字1,2,3,4 ......
图像表格内容为:
select *
from yourTable
id city country
----------- ---------- ----------
1 Madrid Spain
3 Lisbon Portugal
7 Moscow Russia
10 Brasilia Brazil
(4 row(s) affected)
要重新排序ID,只需运行:
declare @counter int = 0
update yourTable
set @counter = id = @counter + 1
(4 row(s) affected)
您现在可以检查,确实所有ID都已重新排序:
select *
from yourTable
id city country
----------- ---------- ----------
1 Madrid Spain
2 Lisbon Portugal
3 Moscow Russia
4 Brasilia Brazil
(4 row(s) affected)
但是,你需要小心这一点。如果某个表具有此id
列的外键,则需要先禁用该FK,更新此表,更新其他表中具有FK指向yourTable的值,最后再次启用FK
答案 3 :(得分:0)
首先,我认为您可能对Id列的目的存在一些误解。 Id列可能是代理键;即一个永远不会向用户显示的唯一且非空的任意值。因此,不应暗示具有任何继承意义或顺序。实际上,您应始终使用另一列标记为唯一的列来表示“业务键”或用户唯一的一组值。在您的情况下,city, country
应该是唯一的(尽管您可能需要添加省或州,因为在同一个国家/地区同时存在多个相同的城市。)
现在,如果满足以下条件,则可以对您的ID进行重新排序:
Update MyTable
Set Id = T2.NewId
From (
Select Id
, Row_Number() Over ( Order By Id ) As NewId
From MyTable
) As T1
Join MyTable As T2
On T2.Id = T1.Id