将Identity列添加到数据库Sql server 2005中的所有表

时间:2013-08-19 07:55:32

标签: sql-server-2005

我有一个数据库,用于在从第三方导入数据时在主生产数据库中传输数据。

我想在每个表格中添加Identity列。

我知道下面的SQL会对单个表做什么,我怎么能对数据库中的所有表做呢?

ALTER TABLE dbo.YourTable
ADD Id INT IDENTITY(1,1) NOT NULL

非常感谢

3 个答案:

答案 0 :(得分:2)

你必须一次只做一张桌子 - 没有“神奇”的方式一次性对所有牌桌做。

您可以通过检查sys.tables目录视图让SQL Server生成该操作所需的T-SQL语句 - 假设您要为所有表调用该标识列Id

SELECT
    t.NAME,
    'ALTER TABLE [' + SCHEMA_NAME(t.SCHEMA_ID) + '].[' + t.NAME +
    '] ADD Id INT IDENTITY(1,1) NOT NULL'
FROM
    sys.tables t

现在,复制&粘贴此语句的结果行并对数据库执行这些行 - 您已完成!

答案 1 :(得分:0)

U可以使用'sp_MSforeachtable'并将其添加到数据库中的每个表中 只需运行以下查询:

EXEC sp_MSforeachtable '
if not exists (select * from sys.columns 
           where object_id = object_id(''?'')
           and name = ''ColName'')
begin
ALTER TABLE ? ADD ColName <DataType> NULL ; // or NOT NULL DEFAULT 
<DefaultValue>;
end';

答案 2 :(得分:0)

如果您使用的是 Azure SQL,则此存储过程在可编程性下不可用。 您可以从本地 sql server 的 master 数据库中移植它。或者使用此链接运行存储过程 https://gist.github.com/metaskills/893599