动态SQL - 为什么变量保持为空

时间:2017-01-11 14:35:19

标签: sql sql-server dynamic-sql

我有动态sql的问题(是的只有一个;))

在内存存储过程中,我声明了一个像这样的局部变量:

DECLARE @cmd nvarchar(max) 在代码的后面,我有一行输入参数,我接收了很多输入参数(很抱歉这个混乱没有成功组织它):

SET @cmd = 'INSERT INTO dbo.' + @ArchiveTableName + '(' + @ArchiveFieldsName + ',' + @ArchiveEntityMainIdentifierField + ')
    SELECT ' + @EntityFieldsName + ',' + '' + @EntityMainIdentifierField + '' +
       ' FROM [' + @OrganizationName + '].[dbo].[' + @EntityName + '] ent
        left join dbo.' + @ArchiveTableName + ' arc on arc.' + @ArchiveEntityMainIdentifierField + ' = ent.' + @EntityMainIdentifierField + '
        where ent.' + @EntityMainIdentifierField + ' = ''' + @ParentId + ''' and arc.' + @ArchiveEntityMainIdentifierField + ' is null'

在调试之后,我发现了一些奇怪的东西。运行后,@ cmd保持为空。

有人可以告诉我为什么会这样吗?

1 个答案:

答案 0 :(得分:5)

我打赌你的其他变量之一是NULL'Something' + NULL = NULL。您可以使用CONCAT(sql server 2012+),它会将NULL变为空字符串。更好的是使用COALESCE(sql server 2008+)(并确保基本变量不是NULL)。