用于更改表添加复合主键的批量 SQL 语句

Posted

技术标签:

【中文标题】用于更改表添加复合主键的批量 SQL 语句【英文标题】:Bulk SQL statement for alter table add composite primary key 【发布时间】:2019-01-18 01:17:07 【问题描述】:

我正在使用 SQL Server 2012,并且我有一个包含 1000 个表的数据库。我当前的表设计对每个表都有一个主键。现在我的设计已更改为使用复合主键。如何使用批量修改语句添加复合主键?

例如:

alter table table_name 
    add primary key (col_name1, col_name2);

【问题讨论】:

【参考方案1】:

使用sp_MSforeachtable 系统过程(未记录)遍历所有表:

EXEC sp_MSforeachtable @command1="alter table ? add primary key (col_name1, col_name2)"
GO

确保您没有定义主键,这样才能顺利运行。这可能需要一些时间!

【讨论】:

他明确提到表已经在单列上定义了主键。此脚本生成错误,指示已存在 PK。 应该有一些方法可以通过使用 `` IF EXISTS ``` 或类似的东西来检查现有的主键。 有一种方法可以做到这一点,但有问题的 OP 要求一种添加主键的方法,而不是删除现有的主键。 哦,我真的做到了。不过,OP 似乎很熟悉这样一个事实,即他首先需要能够删除 PK,因为他/她附上了一个示例,这可能意味着 OP 已经为单个表尝试过此操作。无论如何,我稍后会将其包含在答案中。

以上是关于用于更改表添加复合主键的批量 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章

WHERE col1,col2 IN (...) [使用复合主键的 SQL 子查询]

如何在SQL Server中获取具有复合主键的表列表?

如何为具有复合主键的表构建外键?

Hibernate 表映射 主键生成策略与复合主键

复合主键的一部分可以用作另一个表的复合主键的一部分吗?

Mysql复合主键的索引