我有动态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保持为空.
任何人都可以告诉我为什么会发生这种情况?
我打赌你的其他变量之一是NULL
.'Something' + NULL = NULL
.你可以使用CONCAT(sql server 2012+),它将NULL
变成一个空字符串.更好的是使用COALESCE(sql server 2008+)(并确保基本变量不是NULL
).