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

动态SQL-为什么变量保持为空,sql,sql-server,dynamic-sql,Sql,Sql Server,Dynamic Sql,我对动态sql有问题(是的,只有一个;) 在存储过程中,我声明了一个局部变量,如下所示: 声明@cmd nvarchar(最大值) 在后面的代码中,我有一行代码,其中包含我的sp接收到的大量输入参数(很抱歉,没有成功地将其组织起来): 在我调试之后,我发现了一些奇怪的东西。运行此命令后,@cmd将保持为空 有人能告诉我为什么会发生这种情况吗?我打赌你的另一个变量是NULL'Something'+NULL=NULL。您可以使用(sql server 2012+),它将NULL转换为空字符串。更好的

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

在存储过程中,我声明了一个局部变量,如下所示:

声明@cmd nvarchar(最大值) 在后面的代码中,我有一行代码,其中包含我的sp接收到的大量输入参数(很抱歉,没有成功地将其组织起来):

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


有人能告诉我为什么会发生这种情况吗?

我打赌你的另一个变量是
NULL
<代码>'Something'+NULL=NULL。您可以使用(sql server 2012+),它将
NULL
转换为空字符串。更好的方法是同时使用(sql server 2008+)(并确保基本变量不是
NULL
)。

我打赌您的其他变量之一是
NULL
<代码>'Something'+NULL=NULL。您可以使用(sql server 2012+),它将
NULL
转换为空字符串。更好的方法是同时使用(sql server 2008+)(并确保基本变量不为
NULL
)。

如果一个
变量
NULL
,那么整个字符串将变为
NULL
哦,我不知道,我现在就检查它。是的,谢谢!如果一个
变量
NULL
那么整个字符串将变为
NULL
哦,我不知道,我现在就检查它。是的,就是这样,谢谢!
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'