0

我有一个 SQL Server,上面有大约 100 个数据库。大多数数据库都遵循相同的架构,例如,它们有一个名为 dbo.Files 的表。

我想编写一个查询,它将返回所有数据库中所有 dbo.Files 的 UNIONed 结果,但没有专门引用表本身(太多了!)。我已经设法创建了一些动态 SQL,但这似乎很笨拙,我需要开发它。

SELECT 'SELECT count(*) FROM ' + '[' + name + ']' + '.dbo.Files'    
FROM master..sysdatabases   

该查询还应该考虑到并非所有数据库都有一个 dbo.Files 表这一事实(并且可能会输出一行这么多的内容)。

4

1 回答 1

2

变量对象名称需要使用动态 SQL,sp_MSforeachdb可以简化这一点:

sp_MSforeachdb 'USE [?]
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.tables WHERE TABLE_NAME = ''Files'' AND TABLE_TYPE = ''BASE TABLE'' AND TABLE_SCHEMA = ''dbo'')
    PRINT ''SELECT count(*) FROM [?].dbo.Files''
ELSE
    PRINT ''no table in ?''
'

?替换为每个数据库名称)

于 2012-10-22T13:11:49.613 回答