115

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

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

4

6 回答 6

172

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

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

ALTER TABLE <Table_Name>
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<Column1>,<Column2>)
于 2012-01-06T17:20:40.157 回答
24

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

于 2012-01-06T17:53:35.230 回答
4

就我而言,我想向主键(第 4 列)添加一列。我使用此脚本添加 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
)
于 2019-06-11T09:34:40.653 回答
3

在性能方面,没有必要在此期间保留非聚集索引,因为它们将在删除和创建时重新更新。如果它是一个大数据集,您应该考虑重命名该表(如果可能,是否有任何安全设置?),使用正确的键重新创建一个空表,将所有数据迁移到那里。你必须确保你有足够的空间来做这件事。

于 2017-07-03T11:48:25.400 回答
0

PRIMARY KEY CONSTRAINT只能删除然后再创建。例如在 MySQL 中:

ALTER TABLE table_name DROP PRIMARY KEY;
ALTER TABLE table_name ADD PRIMARY KEY (Column1,Column2);
于 2022-01-13T16:15:24.173 回答
-4

您可以使用 sp_rename 重命名约束对象(如本答案中所述)

例如:

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint'
于 2015-04-21T18:50:12.577 回答