2017-09-04 64 views
1

以下SQL查询仅返回一个表所需的结果。如何在游标查询或其他方法中使用我的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

如果犯错架构中的每个表中包含了一个名为“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; 
+0

首先谢谢。如何将结果记录在单个表格中? –

+0

我已经更新了我的答案以使用全局临时表(在动态查询之外不会有本地临时表)。 –

+0

索引碎片如何分解? –