【问题标题】:Dynamic SQL showing SQL statement NULL显示 SQL 语句 NULL 的动态 SQL
【发布时间】:2020-01-18 23:26:49
【问题描述】:

运行此代码时:

DECLARE @strSelectQuery NVARCHAR(MAX),
        @strColumnList  NVARCHAR(MAX),
        @strTempTable   NVARCHAR(50),
        @strMainTable   NVARCHAR(50)

SET @strTempTable = 'TempdimRevenueCode'
SET @strMainTable = 'dimRevenueCode'
SET @strColumnList = 'DBID,Revenue_Code_ID,Revenue_Code_AltID,revenue_code,revenue_code_description,BeginUTCDateTime,EndUTCDateTime,IsCurrent'

SELECT @strSelectQuery = COALESCE(@strSelectQuery,'UNION ALL') + ' UNION ALL ' + CHAR(13) 
                             + ' SELECT '+CONVERT(VARCHAR,DBID) +' as ' + @strColumnList + CHAR(13) 
                             + ' FROM ['+ InstanceName +'].['+DBName+'].dbo.'+@strMainTable + CHAR(13)
                             + ' WHERE BeginUTCDateTime  > ' + CHAR(13)
                             +'      (SELECT ISNULL( MAX(BeginUTCDateTime) ,''1900-01-01'') FROM  '+@strMainTable +  ' WHERE DBID='+CONVERT(VARCHAR,DBID)+')'+CHAR(13) 
                             +' OR    EndUTCDateTime  > ' + CHAR(13)
                             +'      (SELECT ISNULL( MAX(BeginUTCDateTime) ,''1900-01-01'') FROM  '+@strMainTable +  ' WHERE DBID='+CONVERT(VARCHAR,DBID)+')'+CHAR(13) 
FROM adminODSDBDetails 
WHERE Active_TF = 1 and ClientProductName='GEMINI'

SELECT @strSelectQuery

EXECUTE sp_executesql   @strSelectQuery

选择动态语句(select @strSelectQuery)时,显示为NULL

如果我从动态代码中删除ClientProductName='GEMINI' 并选择@strSelectQuery,它正在打印一个有效的SQL 语句。

【问题讨论】:

  • adminODSDBDetails表中是否有ClientProductName='GEMINI'的记录?由于您要添加字符串,因此其中一个为空就足以使其全部为 NULL。我建议在表中的每一列上使用 ISNULL。
  • 你从SELECT * FROM adminODSDBDetails WHERE Active_TF = 1 and ClientProductName='GEMINI'得到什么结果?
  • @ZoharPeled 除了 ClientProductName='GEMINI' 之外没有其他结果,未来可能会出现
  • 嗯,这就是你的@strSelectQuery 为空的原因......

标签: sql-server tsql sql-server-2008 sql-server-2012


【解决方案1】:

这可能是由两个因素造成的:

  • where 中的任一附加条件都会导致查询不返回任何结果(没有记录满足该条件的所有条件)

  • 或者它返回记录,但该记录中的值之一是null,这使得整个语句评估为null

所以我建议单独运行查询:

SELECT DBID,InstanceName,DBName
FROM adminODSDBDetails 
WHERE Active_TF = 1 and ClientProductName='GEMINI'

没有将其分配给变量并且没有额外的文本,看看是什么原因。

【讨论】:

    猜你喜欢
    • 2013-04-30
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2011-04-25
    • 1970-01-01
    • 2013-06-14
    相关资源
    最近更新 更多