如何在游标查询或其他方法中使用我的SQL查询?

时间:2017-09-04 19:28:04

标签: sql-server

以下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查询中每一行的操作。

如何使用游标或其他方法执行此操作?谢谢你的帮助。

1 个答案:

答案 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;