我正在构建动态SQL语句。我正在检查空值,如果该值不为null,则在参数值周围加上单引号。在下面@TEST_GU
是一个字符串参数。
BEGIN TRAN
DECLARE @SQL nvarchar(max)
SELECT @SQL = 'UPDATE [THIS IS A TABLE]
SET [TEST_GU]=' + '''' + ISNULL(@TEST_GU,'') + ''''+',
+ ' SELECT [TEST_GU] FROM
[THIS IS A TABLE]
WHERE [TEST_GU] =' + '''' + ISNULL(@TEST_GU,'') + '''' +''
PRINT LEN(@SQL)
EXEC (@SQL)
COMMIT
这不会起作用,因为如果它为null,它最终会在空值周围加上引号,因此会使整个语句变为未格式化。所以我的问题是,在上面的格式中,是否可以检查空值,如果null使用ISNULL
方法的第二个参数(在这种情况下,为空')。如果它不为null,则将参数值放在单引号中。
答案 0 :(得分:2)
只需将引号放在 isnull()
:
SELECT @SQL = 'UPDATE [THIS IS A TABLE]
SET [TEST_GU]=' + '''' + ISNULL(''''+@TEST_GU+'''','') + ''''+',
+ ' SELECT [TEST_GU] FROM
[THIS IS A TABLE]
如果值为NULL
,则连接将返回NULL
,因此它仍然可以执行您想要的操作。