我有一个数据库,用于在从第三方导入数据时在主生产数据库中传输数据。
我想在每个表格中添加Identity
列。
我知道下面的SQL会对单个表做什么,我怎么能对数据库中的所有表做呢?
ALTER TABLE dbo.YourTable
ADD Id INT IDENTITY(1,1) NOT NULL
非常感谢
答案 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