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

时间:2017-09-08 20:31:51

标签: 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.ColleteralValuablePaper
    err.CustomerPayment
    err.CustomerPaymentItemMatching
    err.DealerColleteralPercent
    err.DealerDistributorStatus
    err.DealerShellLimit
    err.DealerWaitingLimit
    err.DistributorPreFinanceLimit
    err.ColleteralValuablePaper
    .
    .
    .

如何在一个查询中将其添加到整个表格中?

3 个答案:

答案 0 :(得分:3)

开箱即用:

SELECT 'ALTER TABLE ' + TABLE_SCHEMA + '.' + TABLE_NAME
  + ' ADD PackageName nvarchar(100);'
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_SCHEMA = 'err';

中提琴!复制并粘贴上述SQL的结果并执行。

泰德。

答案 1 :(得分:1)

DECLARE @i INT =0;
DECLARE @count INT;
DECLARE @name varchar(50);
DECLARE @sql varchar(200);
SELECT @count = count(TABLE_SCHEMA + '.' + TABLE_NAME)
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_SCHEMA = 'err'
DECLARE @temp TABLE(id int identity(1,1), name varchar(50))
INSERT INTO @temp SELECT (TABLE_SCHEMA + '.' + TABLE_NAME) as name
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_SCHEMA = 'err'

WHILE (@i < @count)
BEGIN

    SELECT @name = name from @temp where id = @i

    SET @sql = 'ALTER TABLE ' + @name + ' ADD PackageName nvarchar(100); ' 
    --print @sql;
    EXEC (@sql)
    SET @name = NULL;
    SET @i = @i+1;
END;

答案 2 :(得分:1)

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

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语句。