字符(39)在我的SQL不打印任何东西?
问题描述:
SET @sSQL = 'SELECT top 20 p.ID'
+ CHAR(10) +' from dbo.Prospects P WITH (NOLOCK)'
+ CHAR(10) +' where p.State =ISNULL('+ CHAR(39) + CHAR(39) + @State + CHAR(39) + CHAR(39)+','+'p.State)'
print (@sSql)
当我尝试打印上述语句时,它不会返回任何o/p?字符(39)在我的SQL不打印任何东西?
答
测试
并且如果@State
被设置为一个值它打印输出。我怀疑它是NULL
,这就是为什么你没有看到任何东西。
请注意,您正在尝试构建一个返回值时p.State
是NULL
一个SQL字符串,但串联字符串时,如果@State
是NULL
,拼接的结果变成NULL
。
您可以尝试在当时的测试@State
你构造SQL语句来代替:
SET @sSQL = 'SELECT top 20 p.ID'
+ CHAR(10) +' from dbo.Prospects P WITH (NOLOCK)'
+ CHAR(10) +' where p.State = ' + ISNULL('''' + @State + '''', 'p.State')
答
你必须将@sSQL声明为任何类型。同样在你发布的代码中,@State既没有声明也没有设置。
例如:
DECLARE @sSQL as varchar
是因为它是一个ISNULL函数中存在,但你只需设置一个值,看看是否它打印 – user3442679 2014-09-24 03:08:35
正确的,我用一个值声明'@State'并打印输出。 – 2014-09-24 03:10:22
因此,只是为了打印,我设置了一个值,当我使用SP_EXECUTESQL时,我将删除设置值,它会继续工作 – user3442679 2014-09-24 03:14:06