以下查询只是向表中添加一列。
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
.
.
.
如何在一个查询中将其添加到整个表格中?
答案 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
语句。