我有一个SQL Server,上面有大约100个数据库。大多数数据库遵循相同的模式,例如,它们有一个名为dbo.Files的表。
我想编写一个查询,它将返回所有数据库中所有dbo.Files的UNIONed结果,但没有专门引用表本身(有太多!)。我设法创建了一些动态SQL,但这看起来很笨重,我需要开发它。
SELECT 'SELECT count(*) FROM ' + '[' + name + ']' + '.dbo.Files'
FROM master..sysdatabases
该查询还应考虑到并非所有数据库都有dbo.Files表(并且可能输出一行说明这一点)。
答案 0 :(得分: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 ?''
'
(?
替换为每个数据库名称)