2014-09-24 81 views
0
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不打印任何东西?

回答

1
测试

并且如果@State被设置为一个值它打印输出。我怀疑它是NULL,这就是为什么你没有看到任何东西。

请注意,您正在尝试构建一个返回值时p.StateNULL一个SQL字符串,但串联字符串时,如果@StateNULL,拼接的结果变成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') 
+0

是因为它是一个ISNULL函数中存在,但你只需设置一个值,看看是否它打印 – user3442679 2014-09-24 03:08:35

+0

正确的,我用一个值声明'@State'并打印输出。 – 2014-09-24 03:10:22

+0

因此,只是为了打印,我设置了一个值,当我使用SP_EXECUTESQL时,我将删除设置值,它会继续工作 – user3442679 2014-09-24 03:14:06

0

你必须将@sSQL声明为任何类型。同样在你发布的代码中,@State既没有声明也没有设置。

例如:

DECLARE @sSQL as varchar