执行向所有表添加主键的脚本返回错误

时间:2019-04-23 07:35:17

标签: sql-server tsql dynamic-sql ddl

我想将主键IDD添加到架构中的每个'Temp...'表。我正在尝试通过以下方式进行操作:

DECLARE @addId VARCHAR(MAX) = '';
SELECT @addId = @addId + 'ALTER TABLE ['+ TABLE_NAME +'] ADD IDD int IDENTITY(1,1);ALTER TABLE ['+TABLE_NAME +'] ADD PRIMARY KEY (IDD);' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'Temp%'
EXEC (@addId );

我返回了这样的错误:

Multiple identity columns specified for table 'TempTable'. Only one identity column per table is allowed.

我做错了什么?

编辑:表中尚未定义主键。

2 个答案:

答案 0 :(得分:0)

尝试

SELECT @addId = @addId + 
ALTER TABLE ['+ TABLE_NAME +'] ADD IDD int PRIMARY KEY IDENTITY(1,1);
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'Temp%'

答案 1 :(得分:0)

使用此查询可获取所有没有主键的表:

select * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME NOT IN(SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
WHERE  CONSTRAINT_TYPE='PRIMARY KEY')

并相应地修改动态查询。