0

約 100 のデータベースを持つ SQL Server があります。ほとんどのデータベースは同じスキーマに従います。たとえば、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 ?''
'

?各db名に置き換えられます)

于 2012-10-22T13:11:49.613 に答える