查询多个数据库(SQL服务器)

时间:2010-09-07 13:22:25

标签: sql-server

我有多个具有相同结构的数据库,其名称就像“Client1234”,“client”旁边的数字不同我在每个数据库中都有一个名为“Transactions”的表,我想运行查询来计算“交易”中的所有原始数据所有数据库中的表。

当我选择数据库时,我需要检查它是否有客户端字,并且在单词旁边有数字。

4 个答案:

答案 0 :(得分:12)

尝试使用sp_msforeachdb存储过程,如下所示:

create table #temp ([rows] int, [client] varchar(100))
exec sp_msforeachdb '
if ''?'' like ''Client%'' and exists(select * from ?.sys.tables t where t.name = ''Transactions'')
begin
insert into #temp select count(*), ''?'' from ?..Transactions
end
'
select * from #temp 
drop table #temp

答案 1 :(得分:1)

您可以使用动态SQL来创建这些查询:

select 'select count(*) from ' + name + '.dbo.transactions'
from master..sysdatabases
where name like 'Client%'
 and isnumeric(substring(name,6,1))

这将返回一个结果集,每行都是一个SQL查询,用于计算特定数据库。它可以被编程语言使用,用作游标等。如果你提供更多细节,我可以提供一个更好的例子。

答案 2 :(得分:1)

使用Fosco的方法时,最好在数据库名称周围加上括号[]

SELECT 'SELECT count(*) FROM ' + '[' + name + ']' + '.dbo.transactions'   
FROM master..sysdatabases  
WHERE name like 'Client%'  and isnumeric(substring(name,6,1)) 

答案 3 :(得分:0)

如果事先不知道您要查询的数据库的名称和编号,则只能使用动态查询来执行此操作。您需要生成类似

的脚本
SELECT COUNT(*) FROM Client1.dbo.Transactions
SELECT COUNT(*) FROM Client2.dbo.Transactions
...

当然,您需要为每个数据库准备适当的权限。