如何比较两个数据库中有变量名的字段?

问题描述:

我需要从数据库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

如果您想尝试:

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 

它是否适合你?