2017-09-13 10 views
0

このサイトにあるサンプルを使用して、次のクエリを書くことに成功しました。 しかし、うまく機能しますが、検索対象の各データベースの名前を結果に2つの列の横に表示するようにしたいと考えています。すべての私の試みは失敗しました。助けてください。一例として各DBでクエリを実行し、DB名も表示

DECLARE @sql varchar(max); 

SELECT @sql = Coalesce(@sql + ' UNION ALL ', '') + 'SELECT column1, column2 FROM ' + QuoteName(name) + '.dbo.T_MyTable' 
FROM sys.databases WHERE database_id > 4 AND state = 0 
; 

PRINT @sql 
EXEC (@sql); 

、次は無効な列名のエラーで

DECLARE @sql varchar(max); 

SELECT @sql = Coalesce(@sql + ' UNION ALL ', '') + 'SELECT SoStoreNameTx, SoStoreNoTx, ' + quotename(name) + ' FROM ' + QuoteName(name) + '.dbo.T_SoStore' 
FROM sys.databases WHERE database_id > 4 AND state = 0 
; 

PRINT @sql 
EXEC (@sql); 
+0

以下のコードを試してみてください、あなたはcolumn2の後に列リストにQUOTENAME(名前)を追加してみました? (FROMキーワードの前に)。それは文字列を選択するだけの ''で囲まれている必要があります。 – PacoDePaco

+0

ありがとう、私は持っていて失敗しました。私は質問を編集して、失敗したクエリを追加します。 – DeepDiver

+0

@DeepDiverはPRINTを見ます - あなたは一重引用符で囲まれていないデータベース名を選択しています - 以下の答えはあなたがそれをどうするべきかを示しています。 – Leonidas199x

答えて

1

を失敗し

DECLARE @sql varchar(max); 

    SELECT @sql = Coalesce(@sql + ' UNION ALL ', '') + 'SELECT column1, column2, ''' + QuoteName(name)+ ''' as DBname FROM ' + QuoteName(name) + '.dbo.T_MyTable' 
    FROM sys.databases WHERE database_id > 4 AND state = 0 
    ; 

    PRINT @sql 
    EXEC (@sql); 
+0

これは完璧に、本当に感謝して動作します。また、別の同様のクエリを修正するのに役立ちます。 – DeepDiver

関連する問題