2017-09-04 83 views
0

我需要從數據庫'DWH_Staging'返回一個字段'CreditAdvisor_PrimaryCode',其中來自數據庫'DWH_Staging'的字段'CooperationEndDate'不包含來自具有變量名稱的數據庫的字段'DatumUkonceni'。我們有一個過程'adm.MaxBatch'用變量名返回數據庫的實際名稱。 我試過了:如何比較變量名稱的數據庫字段?

DECLARE @db_is nvarchar(50) 

SELECT @db_is = mb.DatabaseName 
FROM adm.MaxBatch mb  
WHERE mb.SourceID = 1 

PRINT @db_is 

SELECT 
    ca.CreditAdvisorCode_Primary 
FROM 
    @db_is.CS_Prodejci prod 
    JOIN DWH_Staging.dim.CreditAdvisor ca 
     ON prod.KodOZ = ca.CreditAdvisorId 
WHERE 
    prod.KonecCinnosti <> ca.CooperationEndDateId 

任何幫助,將不勝感激。

+0

而且你發現了什麼?這段代碼存在明顯的問題,但我很好奇你已經嘗試了哪些努力。 –

+0

@clifton_h多部分標識符無法綁定。但我不知道如何解決。 –

+0

問題出在編譯時。沒有可變數據庫/模式/表名稱。相反,像下面的答案一樣,使用動態sql。我的建議是閱讀:[動態SQL | Microsoft Docs](https://docs.microsoft.com/zh-cn/sql/odbc/reference/dynamic-sql)在將自己暴露給SQL注入之前 –

回答

1

,而選擇從變量數據庫中你需要做動態的,例如:

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

SET @string=' Select ca.CreditAdvisorCode_Primary 
       from '[email protected]_is+'..CS_Prodejci 
       JOIN DWH_Staging.dim.CreditAdvisor ca 
       ON prod.KodOZ = ca.CreditAdvisorId 
       WHERE prod.KonecCinnosti <> ca.CooperationEndDateId ' 

    PRINT @string 
    EXEC(@string) 
+0

變量@strt是什麼? –

+0

這是打印錯誤我已將其刪除。@ strt與查詢無關 –

+0

它不會返回任何內容... –

相關問題