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

时间:2012-01-06 17:06:39

标签: sql-server

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

我可以使用什么语法来执行此操作?我必须放弃并重新创建关键约束吗?

6 个答案:

答案 0 :(得分:125)

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

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

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

答案 1 :(得分:20)

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

答案 2 :(得分:3)

在性能方面,没有必要在此期间保留非聚簇索引,因为它们将在drop和create上重新更新。 如果它是一个大数据集你应该考虑重命名表(如果可能的话,它上面的任何安全设置?),重新创建一个带有正确密钥的空表,迁移那里的所有数据。 你必须确保你有足够的空间。

答案 3 :(得分:0)

@darnir的答案可以简单地使用:

{{1}}

答案 4 :(得分:0)

就我而言,我想向主键(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
)

答案 5 :(得分:-3)

您可以使用sp_rename重命名约束对象(如this answer中所述)

例如:

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