2017-09-13 121 views
0

使用我在本站點找到的示例,我成功地編寫了以下查詢。 它運作良好,但是,我希望得到每個被查詢的數據庫的名稱在結果中報告,在這兩列旁邊。我所有的嘗試都失敗了。請提供任何幫助。在每個數據庫上運行查詢並顯示數據庫名稱

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

代碼列列表? (在FROM關鍵字之前)。它應該接受'',所以你只需選擇一個字符串。 – PacoDePaco

+0

謝謝,我已經失敗了。我編輯我的問題以添加失敗的查詢 – DeepDiver

+0

@DeDDiver查看PRINT - 您選擇的數據庫名稱未包含在單引號中 - 下面的答案顯示了您應該如何執行此操作。 – Leonidas199x

回答

1

嘗試COLUMN2後,你有沒有嘗試加入QUOTENAME(名字)下面

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