2017-08-23 24 views
0

テーブルにデータを挿入するselect文を記述しようとしています。 'Centers'で始まるすべてのデータベースと 'AcctHist'で始まるデータベースのすべてのテーブルからデータを選択する必要があります。クロス結合を使用してDatabasename.Tablenameのすべての組み合わせを取得しています。しかし、そのような組み合わせはすべて無効であるため、選択前にテーブルが存在するかどうかを確認しようとしています。これをDynamicクエリの一部として追加しましたが、if文の間にUNIONを取得します。 CTEから有効なDB.tableの組み合わせのみを選択できますか?ダイナミッククエリでそれをしないで?ifとUNION ALLを使用した動的クエリ

答えて

1

各データベースにあるテーブルに基づいて動的SQLを生成するには、システムテーブルを使用する必要があります。このコードはあなたが始めなければなりません。

declare @SQL nvarchar(max) = '' 

select @SQL = @SQL + 'select DatabaseName = ''' + name + ''', * from [' + name + '].sys.tables t where t.name like ''AcctHist%'' UNION ALL ' 
from sys.databases d 
where name like 'Centers%' 

set @SQL = left(@SQL, len(@SQL) - 10) 

select @SQL 
--uncomment the exec line below when you are comfortable the dynamic sql is correct. 
--exec sp_executesql @SQL 
関連する問題