我有一个数据库,用于在我们从第三方导入数据时跨主生产数据库传输数据。
我想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