如何使用SQL语法更改主键约束?


100

我有一个表在其主键约束中缺少一列。我不想通过SQL Server对其进行编辑,而是希望将其放在脚本中以将其添加为更新脚本的一部分。

我可以使用什么语法来做到这一点?我必须删除并重新创建键约束吗?


5
AFAIK是的,您需要删除并重新创建PK约束。我不记得有任何命令可以将列添加到已经存在的PK / FK约束中。
Seramme,2012年

Answers:


149

是。唯一的方法是使用Alter表删除约束,然后重新创建约束。

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

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

11
如果您不知道主键约束名称,请使用此处找到的查询进行查找(或一次查找和删除所有内容)。http://stackoverflow.com/a/13948609/945875
贾斯汀

如果不清晰,或其他任何人犯同样的错误,约束在引号不能走alter table PatientsInfo drop constraint PK__Patients__1CBB51380A338187在这里工作
马斯洛

1
对于您中的那些人,不知道约束名称:ALTER TABLE dbtable 删除主键,添加主键(id1id2);
karsten314159

20

PRIMARY KEY CONSTRAINT无法更改,则只能将其删除并重新创建。对于大型数据集,这可能会导致运行时间长,从而导致表不可用。


3

在性能方面,没有必要在此期间保留非聚集索引,因为它们将在放置和创建时进行重新更新。如果数据量很大,则应考虑重命名该表(如果可能,是否有任何安全设置?),使用正确的键重新创建一个空表,将所有数据迁移到该表中。您必须确保有足够的空间用于此操作。


1

就我而言,我想向主键(column4)添加一列。我使用此脚本添加了column4

ALTER TABLE TableA
DROP CONSTRAINT [PK_TableA]

ALTER TABLE TableA
ADD CONSTRAINT [PK_TableA] PRIMARY KEY (
    [column1] ASC,
    [column2] ASC, 
    [column3] ASC,
    [column4] ASC
)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.