【发布时间】:2015-06-11 01:17:56
【问题描述】:
我有一个包含 600 多个表的数据库。有些表有主键,有些没有。我怎样才能动态:
1. 遍历所有表
2. 选择没有主键的
3. 添加一个自增字段
4. 将此字段设为主键
我认为这将是以下几种情况的组合:
USE MyDataBase;
GO
-- List all tables without primary constraint
SELECT i.name AS IndexName,
OBJECT_NAME(ic.OBJECT_ID) AS TableName,
COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName
FROM sys.indexes AS i
INNER JOIN sys.index_columns AS ic
ON i.OBJECT_ID = ic.OBJECT_ID
AND i.index_id = ic.index_id
WHERE i.is_primary_key = 0
GO
-- add new auto incremented field
ALTER TABLE MyTable
ADD PK_ID BIGINT IDENTITY;
GO
-- create new primary key constraint
ALTER TABLE MyTable
ADD CONSTRAINT PK_ID PRIMARY KEY NONCLUSTERED (PK_ID);
GO
【问题讨论】:
标签: sql sql-server database for-loop primary-key