2012-01-06 22 views
65

我有一個表的主鍵約束中缺少一列。我不想通過SQL Server進行編輯,而是將其放入腳本中,以將其添加爲我們更新腳本的一部分。如何使用SQL語法更改主鍵約束?

我可以用什麼語法來做到這一點?我必須刪除並重新創建關鍵約束嗎?

+3

AFAIK是的,你需要刪除並重新創建PK約束。我不記得任何命令添加一列到一個已經存在的PK/FK約束。 – Seramme 2012-01-06 17:12:55

回答

96

是的。唯一的方法是用Alter表刪除約束然後重新創建它。

ALTER TABLE <Table_Name> 
DROP CONSTRAINT <constraint_name> 

ALTER TABLE <Table_Name> 
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<Column1>,<Column2>) 
+8

如果您不知道主鍵約束名稱,請使用此處查詢的查詢來查找它(或一次查找並全部刪除)。 [http://stackoverflow.com/a/13948609/945875](http://stackoverflow.com/a/13948609/945875) – Justin 2013-12-19 20:06:56

+0

如果不清楚,或者其他人犯了同樣的錯誤,約束名稱可以't進去引用alter table PatientsInfo 下降約束PK__Patients__1CBB51380A338187'在這裏工作 – Maslow 2015-12-09 19:03:14

17

PRIMARY KEY CONSTRAINT不能改變,你只能刪除它並重新創建。對於大數據集,它可能會導致長時間運行,從而導致表不可用。

-4

可以重命名約束對象使用sp_rename(如this answer描述)

例如:在此

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint' 
+2

問題是如何更改約束,即添加一列,而不是如何重命名。 – 2015-07-02 16:09:49

1

性能方面沒有一點保留非聚集索引,因爲他們將得到重新在刪除和創建時進行更新。 如果它是一個大數據集,你應該考慮重新命名錶(如果可能的話,它的任何安全設置?),用正確的密鑰重新創建一個空表並遷移那裏的所有數據。 你必須確保你有足夠的空間。