以下SQL查询只返回一个表所需的结果。
SELECT [NoMatchExplanation], COUNT(*)
FROM err.CustomerBank
GROUP BY (NoMatchExplanation)
我想对下面查询中的所有表执行此操作,这些表的架构为“错误”。
SELECT TABLE_SCHEMA + '.' + TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'err'
上述SQL查询的输出:
err.ColleteralValuablePaper
err.CustomerPayment
err.CustomerPaymentItemMatching
err.DealerColleteralPercent
err.DealerDistributorStatus
err.DealerShellLimit
err.DealerWaitingLimit
err.DistributorPreFinanceLimit
err.ColleteralValuablePaper
.
.
.
每一行都是一个表名。我想编写一个SQL查询,它将重复第一个SQL查询中每一行的操作。
如何使用游标或其他方法执行此操作?谢谢你的帮助。
答案 0 :(得分:0)
如果err架构中的每个表都包含名为' NoMatchExplanation'的列,则下面的查询应该有效:
declare @table_name sysname;
declare @stmt nvarchar(max);
create table ##temp(NoMatchExplanation nvarchar(250), cnt int);
declare cur_tables cursor for
SELECT TABLE_SCHEMA + '.' + TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'err';
open cur_tables;
fetch next from cur_tables into @table_name;
while @@FETCH_STATUS = 0
begin
set @stmt = 'INSERT INTO ##temp(NoMatchExplanation, cnt) SELECT NoMatchExplanation, COUNT(*) FROM ' + @table_name + ' GROUP BY NoMatchExplanation';
exec(@stmt);
fetch next from cur_tables into @table_name;
end
select * from ##temp;
drop table ##temp;
close cur_tables;
deallocate cur_tables;