2014-05-14 23 views
0

讓說我有這個表TSQL:是否可以修改PK-Identity的值?

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

如果我想插入France-Paris。但是我希望那一行有Id = 1,USA Id = 2,那麼日本Id = 3?

有沒有辦法做到這一點使用SQL?我要做的是生成一個腳本,我將手動執行該操作。但是,如果有不同的方式,我想申請它。

感謝您的幫助

+3

爲什麼在這個例子中PK的價值除了被用來唯一地標識一個行以外是如此重要。你將如何處理FK限制? –

+0

因爲我正在重建一個曾經存在的表。在正常情況下,我甚至不擔心它。 – Richard77

回答

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列並重新創建它,因爲你不能更新IDENTITY列。鑑於你可能有其他表依賴於此,這可能比它的價值更麻煩。如果你真的想讓法國在第一名,你必須做很多工作來禁用FK,然後將ID列複製到一個新的列中,在你想要的地方插入你的值,確保這些數字是連續的,最後重新創建身份和主鍵並重新啓用外鍵。

作爲一個方面說明,儘量避免在對象名稱中出現空格。

+0

實際上,一個單獨的唯一訂單字段 - 不是標識 - 可以用於施加排序順序,而不會產生層疊和關鍵失效問題,並會搜索應用程序層。 – TomTom

+0

是的,儘管OP似乎很奇怪地改變了PK值。 –

相關問題