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

我有一个表,它的主键约束中缺少一列。我不想通过 SQLServer 编辑它,而是将它放在一个脚本中,作为更新脚本的一部分添加到脚本中。

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

223974 次浏览

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

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>


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

PRIMARY KEY CONSTRAINT cannot be altered, you may only drop it and create again. For big datasets it can cause a long run time and thus - table inavailability.

可以使用 sp _ rename 重命名约束对象(如 这个答案中所述)

例如:

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

Performance wise there is no point to keep non clustered indexes during this as they will get re-updated on drop and create. 如果是一个大数据集,您应该考虑重命名该表(如果可能的话,它上面有任何安全设置吗?),用正确的键重新创建一个空表,将所有数据迁移到此处。 你得确保有足够的空间。

在我的示例中,我希望将一列添加到主键(column 4)。 I used this script to add 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
)

PRIMARY KEY CONSTRINT 只能被删除,然后重新创建。 例如在 MySQL 中:

ALTER TABLE table_name DROP PRIMARY KEY;
ALTER TABLE table_name ADD PRIMARY KEY (Column1,Column2);