我有多个具有相同结构的数据库,其名称就像“Client1234”,“client”旁边的数字不同我在每个数据库中都有一个名为“Transactions”的表,我想运行查询来计算“交易”中的所有原始数据所有数据库中的表。
当我选择数据库时,我需要检查它是否有客户端字,并且在单词旁边有数字。
答案 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
...
当然,您需要为每个数据库准备适当的权限。