2017-09-04 20 views
0

我需要從數據庫DWH_Staging返回一個字段CreditAdvisor_PrimaryCode,其中來自數據庫DWH_Staging的字段CooperationEndDate不會從具有變量名稱的數據庫中獲取字段DatumUkonceni。我們有一個程序adm.MaxBatch用變量名稱返回數據庫的實際名稱。我一個SP如下:如何比較兩個數據庫中有變量名的字段?

DECLARE @db_is NVARCHAR(50) 
DECLARE @string NVARCHAR(MAX) 

SET @db_is = (
     SELECT mb.DatabaseName 
     FROM adm.MaxBatch mb 
     WHERE mb.SourceID = 1 
     ) 
SET @string = 'SELECT 
       ca.CreditAdvisorCode_Primary 
       FROM ' + @db_is + '..CS_Prodejci prod 
       JOIN ' + @db_is + '..CS_OZ oz ON prod.RC = oz.OZ_RC 
       JOIN DWH_Staging.dim.CreditAdvisor ca ON oz.KodOZ = ca.CreditAdvisorCode_Primary 
       WHERE prod.KonecCinnosti <> ca.CooperationEndDateId' 

PRINT @string 

EXEC (@string) 

它只返回一個文本輸出。 任何幫助將被折扣。謝謝。

+1

它不應該只是返回一個文本輸出,而是將T-SQL打印到消息窗口中,然後執行它,所以它應該返回結果,但可能它不會這樣做? CreditAdvisor_PrimaryCode和CreditAdvisorCode_Primary列是相同的嗎? – Leonidas199x

+0

只有CreditAdvisorCode_Primary,它應該是正確的。 –

+0

我看不出代碼有什麼問題,它應該正在執行,並且如果動態sql解析不正確,它會給你一個錯誤。如果複製打印輸出並運行它,它是否會返回預期結果? – Leonidas199x

回答

0

如果您想嘗試:

DECLARE @db_is NVARCHAR(50) 
DECLARE @string NVARCHAR(MAX) 

SET @db_is = N'S01_20170904' 

/*= (
     SELECT mb.DatabaseName 
     FROM adm.MaxBatch mb 
     WHERE mb.SourceID = 1 
     ) 
*/ 

SET @string = N'SELECT 
       ca.CreditAdvisorCode_Primary 
       FROM [' + @db_is + ']..[CS_Prodejci] prod 
       JOIN [' + @db_is + ']..[CS_OZ] oz ON prod.RC = oz.OZ_RC 
       JOIN DWH_Staging.dim.CreditAdvisor ca ON oz.KodOZ = ca.CreditAdvisorCode_Primary 
       WHERE prod.KonecCinnosti <> ca.CooperationEndDateId' 

EXEC sp_executesql @string 

它是否適合你?