TSQL:是否可以修改PK-Identity的值?

时间:2014-05-14 14:59:50

标签: sql-server tsql

假设我有这张表

 Id(PK)     Country         Capital City
+--------+---------------+------------------+
+   1    +    USA        + Washington, D.C. +
+--------+---------------+------------------+
+   2    +   Japan       +  Tokyo           +
+--------+---------------+------------------+

如果我想插入France-Paris怎么办?但是我希望那行有Id = 1,USA Id = 2,然后是日本Id = 3?

有没有办法使用SQL?我要做的是生成一个脚本,我会手动完成。但是,如果有不同的方式,我想应用它。

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

是的,但如果你的价值观错了,那就不是很好了。使用IDENTITY_INSERT

SET IDENTITY_INSERT dbo.Country ON
--Do your manipulation here.
INSERT INTO dbo.County(Id, country, [Capital City]) SELECT 1, 'France', 'Paris'
SET IDENTITY_INSERT dbo.Country OFF

但是:您有一个标识和一个主键,您需要对值进行随机播放,因此您需要删除ID列并重新创建它,因为您无法更新{{1} }列。鉴于你可能有其他依赖于此的表,这可能比它的价值更麻烦。如果您真的急于让法国处于第1位,您将需要做很多工作来禁用FK然后将ID列复制到新列,将值插入到您想要的位置,确保数字是顺序,最后重新创建标识和主键,并重新启用外键。

作为旁注,请尽量避免使用对象名称中的空格。