我有一个数据库,用于在我们从第三方导入数据时跨主生产数据库传输数据。
我想Identity为每个表添加一列。
我知道下面的 SQL 将适用于单个表,我该如何为数据库中的所有表执行此操作?
ALTER TABLE dbo.YourTable
ADD Id INT IDENTITY(1,1) NOT NULL
非常感谢
我有一个数据库,用于在我们从第三方导入数据时跨主生产数据库传输数据。
我想Identity为每个表添加一列。
我知道下面的 SQL 将适用于单个表,我该如何为数据库中的所有表执行此操作?
ALTER TABLE dbo.YourTable
ADD Id INT IDENTITY(1,1) NOT NULL
非常感谢
您必须一次处理一张桌子 - 没有“神奇”的方法可以一次处理所有桌子。
您可以通过检查目录视图让 SQL Server 生成该操作所需的 T-SQL 语句sys.tables- 假设您要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
现在,复制并粘贴此语句的结果行并针对您的数据库执行这些行 - 您就完成了!
您可以使用“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';
如果您使用的是 Azure SQL,则此存储过程在可编程性下不可用。您可以从本地 sql 服务器的主数据库中移植它。或者使用此链接运行存储过程 https://gist.github.com/metaskills/893599