2017-01-06 5 views
0

複数の同じ列を選択し、異なるデータベースから複数のコマンドを実行しようとしていますが、その列を変数として一度リストし、SELECT 。宣言された列のテーブルに基づくSELECT

それは現在が、はるかに少ない列&のSELECTで行われる方法:私は作業を取得するために望んでいるものの

SELECT Column1 
     ,Column2 
     ,Column3 
FROM [db1] 

--Processes 

SELECT Column1 
     ,Column2 
     ,Column3 
FROM [db2] 

--Processes 

SELECT Column1 
     ,Column2 
     ,Column3 
FROM [db3] 

--Processes 

アイデア:

DECLARE @ListofColumns VARCHAR; 
SET @ListofColumns = 'Column1,Column2,Column3'; 

SELECT @ListofColumns 
FROM [db1] 

--Processes 

SELECT @ListofColumns 
FROM [db2] 

--Processes 

SELECT @ListofColumns 
FROM [db3] 

--Processes 
+2

これを実行するには、動的SQLを使用する必要があります。コードを複雑にする。 –

+0

動的SQL(EXEC/sp_executeSQL)はこれを実行する唯一の方法です。オブジェクト識別子を変数に格納することはできません。 –

+0

これは、それぞれのクエリの構造が同じであれば、(文書化されていない) 'sp_MSforeachdb'と' sp_MSforeachtable'ストアドプロシージャを使用して、重要なデータベースとテーブルを対象にする適切なフィルタを使用する場合があります。しかし、このような場合、最初に同じタイプのデータが複数の場所に格納されている理由について質問したいと思います。*データ*の一部が、代わりに*メタデータ*になりました(ここではデータベース名になります)。 –

答えて

1

あなたは動的SQLを使用する必要がありますここのようなもの.....

DECLARE @ListofColumns VARCHAR(1000) --<-- Define length here 
     ,@SQL NVarchar(MAX); 

SET @ListofColumns = 'Column1,Column2,Column3'; 

SET @SQL = N'SELECT ' + @ListofColumns + N' FROM [db1]' 

exec sp_executesql @SQL 
関連する問題