Q
更改主鍵值
0
A
回答
4
0
我自己從來沒有這樣做過,這聽起來像是一個壞主意。這就是說,我沒有找到這篇文章肚裏了兩個方法實現此目的:
http://support.microsoft.com/kb/142480
一個使用存儲的特效和其他觸發器。兩者似乎都有點痛苦。
+0
我不是在尋找一個代碼,只需按一下按鈕即可。這只是單一的改變,以解決我的數據庫計劃。 – Naor
5
下面是一個示例,說明如何使用ON UPDATE CASCADE
外鍵選項執行此操作。你會感興趣的部分是兩個ALTER TABLE
陳述。
如果您爲主鍵使用IDENTITY
列,則由於無法更新IDENTITY
列而變得更加困難。
CREATE TABLE Parent
(
ParentId INT NOT NULL CONSTRAINT [PK_Parent] PRIMARY KEY CLUSTERED,
Name VARCHAR(10) NOT NULL
)
CREATE TABLE Child
(
ChildId INT NOT NULL CONSTRAINT [PK_Child] PRIMARY KEY CLUSTERED,
ParentId INT NOT NULL CONSTRAINT [FK_Child_ParentId] FOREIGN KEY REFERENCES Parent (ParentId),
Name VARCHAR(10) NOT NULL
)
INSERT INTO Parent (ParentId, Name) VALUES (1, 'Bob')
INSERT INTO Parent (ParentId, Name) VALUES (2, 'Sue')
INSERT INTO Child (ChildId, Name, ParentId) VALUES (1, 'Alice', 1)
INSERT INTO Child (ChildId, Name, ParentId) VALUES (2, 'Billy', 2)
SELECT * FROM Child
-- Drop foreign key constraint and re-add
ALTER TABLE Child
DROP CONSTRAINT [FK_Child_ParentId]
ALTER TABLE Child
ADD CONSTRAINT [FK_Child_ParentId]
FOREIGN KEY (ParentId) REFERENCES Parent (ParentId) ON UPDATE CASCADE
UPDATE Parent SET ParentId = ParentId + 100
SELECT * FROM Child --shows the new ParentIds
DROP TABLE Child
DROP TABLE Parent
0
這是IDENTITY列的一個重大缺點,它不能直接更新。
解決方法是不要在目標表中使用IDENTITY,而是將其放入額外的表中。首先用IDENTITY列插入到表中,然後將生成的IDENTITY值插入到目標表中。
SQL Server 2012引入了與表獨立的序列,這是更好的解決同一問題的方法。一個序列不需要額外的表格。
0
我知道這不是你的問題的答案,但我來到這裏,同時尋找如何簡單地設置(寫入,插入,更新或其他)一個PK(主鍵)列。
因此,您必須禁用PK約束,插入您的值,然後啓用它,更新將不起作用。
SET IDENTITY_INSERT IdentityTable ON
INSERT IdentityTable(TheIdentity, TheValue) VALUES (3, 'First Row')
SET IDENTITY_INSERT IdentityTable OFF
相關問題
- 1. 更改主鍵
- 2. 更改主鍵
- 3. CQL3更改主鍵
- 4. 更改Oracle中的主鍵值
- 5. 更改SQL Server 2005中的主鍵值
- 6. 更改多個MySQL主鍵的值
- 7. 更改主鍵值的getResult數組鍵值
- 8. sqlite&rails:更改主鍵列?
- 9. 在Oracle中更改主鍵
- 10. MySQL:更改主鍵的ID
- 11. HashMap - 更改鍵值
- 12. SQL更改語句和外鍵/主鍵
- 13. 更改主鍵和外鍵的ActiveRecord
- 14. 討論:更新主鍵值
- 15. 將主鍵更改爲複合鍵(主鍵已存在)
- 16. 如何更改主鍵的值並在同一時間更新外鍵
- 17. 將GUID主鍵更改爲整數主鍵
- 18. 更改值,快捷鍵
- 19. 我想用主鍵的新值更新表的主鍵
- 20. 在主鍵更改後更新了重構外鍵
- 21. 的jqGrid從ID更改主鍵值名聯編輯
- 22. 當行具有相同的值時,您如何更改主鍵?
- 23. 如何更改一對一關係中的主鍵值?
- 24. 更改表中主鍵的值和參考表中的FK
- 25. SQL服務器:更改主鍵值身份
- 26. 更改用戶主鍵ASP.NET身份
- 27. Dapper擴展 - 更改主鍵字段
- 28. 更改的AppEngine數據存儲主鍵
- 29. 更改EF6中的主鍵名稱
- 30. 更改主鍵,但得到的錯誤
出於好奇,你爲什麼要這麼做? –
@Abe Miessler:我必須改變我的db結構。我想創建所有這10個表超類型。 – Naor