【发布时间】: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