1

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

我想Identity为每个表添加一列。

我知道下面的 SQL 将适用于单个表,我该如何为数据库中的所有表执行此操作?

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

非常感谢

4

3 回答 3

2

您必须一次处理一张桌子 - 没有“神奇”的方法可以一次处理所有桌子。

您可以通过检查目录视图让 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

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

于 2013-08-19T08:20:50.990 回答
1

您可以使用“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';
于 2020-01-07T07:55:54.030 回答
0

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

于 2021-04-05T06:34:56.693 回答