2017-09-04 51 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

它不会返回任何内容... –

相关问题