同一SQL Server上的多个数据库(MS SQL)

时间:2012-10-22 13:00:36

标签: sql sql-server-2005

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

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

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

该查询还应考虑到并非所有数据库都有dbo.Files表(并且可能输出一行说明这一点)。

1 个答案:

答案 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 ?''
'

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