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

Ori*_*l.F 1 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'
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以告诉我为什么会发生这种情况?

Hon*_*ger 5

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