Sql 如何使用查询将同一列添加到多个表中?

Sql 如何使用查询将同一列添加到多个表中?,sql,sql-server,Sql,Sql Server,下面的查询只是向表中添加一列 ALTER TABLE err.PreFinancePaymentPlan ADD PackageName nvarchar(100); 我想将此列添加到以下查询中的每个表中 SELECT TABLE_SCHEMA + '.' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'err' 上述查询的示例输出 err.ColleteralValuablePa

下面的查询只是向表中添加一列

ALTER TABLE err.PreFinancePaymentPlan 
  ADD PackageName nvarchar(100);
我想将此列添加到以下查询中的每个表中

 SELECT TABLE_SCHEMA + '.' + TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_SCHEMA = 'err'
上述查询的示例输出

 err.ColleteralValuablePaper
    err.CustomerPayment
    err.CustomerPaymentItemMatching
    err.DealerColleteralPercent
    err.DealerDistributorStatus
    err.DealerShellLimit
    err.DealerWaitingLimit
    err.DistributorPreFinanceLimit
    err.ColleteralValuablePaper
    .
    .
    .
如何在一次查询中将其添加到整个表格中?

开箱思考:

SELECT 'ALTER TABLE ' + TABLE_SCHEMA + '.' + TABLE_NAME
  + ' ADD PackageName nvarchar(100);'
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_SCHEMA = 'err';
中提琴!复制并粘贴上述SQL的结果并执行

特德

开箱思考:

SELECT 'ALTER TABLE ' + TABLE_SCHEMA + '.' + TABLE_NAME
  + ' ADD PackageName nvarchar(100);'
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_SCHEMA = 'err';
中提琴!复制并粘贴上述SQL的结果并执行

特德

声明@i INT=0;
声明@countint;
声明@name varchar(50);
声明@sqlvarchar(200);
选择@count=count(表\u架构+。+表\u名称)
来自信息\u SCHEMA.TABLES
其中表_SCHEMA='err'
声明@temp表(id int-identity(1,1),名称varchar(50))
作为名称插入@temp SELECT(TABLE_SCHEMA+)。+TABLE_NAME
来自信息\u SCHEMA.TABLES
其中表_SCHEMA='err'
而(@i<@count)
开始
从@temp中选择@name=name,其中id=@i
SET@sql='altertable'+@name+'addpackagename nvarchar(100);'
--print@sql;
EXEC(@sql)
设置@name=NULL;
设置@i=@i+1;
终止
声明@i INT=0;
声明@countint;
声明@name varchar(50);
声明@sqlvarchar(200);
选择@count=count(表\u架构+。+表\u名称)
来自信息\u SCHEMA.TABLES
其中表_SCHEMA='err'
声明@temp表(id int-identity(1,1),名称varchar(50))
作为名称插入@temp SELECT(TABLE_SCHEMA+)。+TABLE_NAME
来自信息\u SCHEMA.TABLES
其中表_SCHEMA='err'
而(@i<@count)
开始
从@temp中选择@name=name,其中id=@i
SET@sql='altertable'+@name+'addpackagename nvarchar(100);'
--print@sql;
EXEC(@sql)
设置@name=NULL;
设置@i=@i+1;
终止

您可以使用动态SQL和

declare @tableName nvarchar(128), @sql nvarchar(max)

declare tableCursor cursor fast_forward for
  SELECT TABLE_SCHEMA + '.' + TABLE_NAME as TableName
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_SCHEMA = 'err'

open tableCursor  
fetch next from tableCursor INTO @tableName
while @@fetch_status=0 begin
  fetch next from tableCursor INTO @tableName
  set @sql='ALTER TABLE '+@tableName+' ADD PackageName nvarchar(100)'
  exec(@sql)
end
close tableCursor;  

这将在游标中使用的查询返回的所有行上循环,并执行动态
ALTER TABLE
语句。

您可以使用动态SQL和a来执行此操作:

declare @tableName nvarchar(128), @sql nvarchar(max)

declare tableCursor cursor fast_forward for
  SELECT TABLE_SCHEMA + '.' + TABLE_NAME as TableName
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_SCHEMA = 'err'

open tableCursor  
fetch next from tableCursor INTO @tableName
while @@fetch_status=0 begin
  fetch next from tableCursor INTO @tableName
  set @sql='ALTER TABLE '+@tableName+' ADD PackageName nvarchar(100)'
  exec(@sql)
end
close tableCursor;  

这将遍历游标中使用的查询返回的所有行,并执行动态
altertable
语句。

可能重复遍历表名并写入动态sql。这是一个可以通过sql脚本生成动态查询的链接。可能重复遍历表名并编写动态sql。这里有一个链接,您可以通过sql脚本生成动态查询。更新“ADD PackageName nvarchar(100);”添加PackageName nvarchar(100)。一个简单的失踪案例谢谢@Acewin。更正。人们确实忘记了将问题分解为真正可行的问题,因此我喜欢你的解决方案。我也会这么做,而不是试图去理解和创造很多动态的东西script@Yeou很高兴你喜欢它!每个DBA都应该这么做很多次!更新“添加PackageName nvarchar(100);”添加PackageName nvarchar(100)。一个简单的失踪案例谢谢@Acewin。更正。人们确实忘记了将问题分解为真正可行的问题,因此我喜欢你的解决方案。我也会这么做,而不是试图去理解和创造很多动态的东西script@Yeou很高兴你喜欢它!每个DBA都应该这么做很多次!