我的表中缺少主键约束中的列。我不想通过SQL Server进行编辑,而是将其放在脚本中,以将其添加为更新脚本的一部分。
我可以使用什么语法来执行此操作?我必须放弃并重新创建关键约束吗?
答案 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'