sp_executesql语法错误

时间:2014-04-10 15:52:40

标签: tsql sql-server-2008-r2 sp-executesql

我正在尝试学习和使用sp_executesql,即使使用这个简单的SQL语句,我也陷入困境。

DECLARE @sql NVARCHAR(MAX) = NULL
DECLARE @WHERE NVARCHAR(MAX) = NULL

SET @sql = N'
    SELECT
        *
    FROM
        MyTable
        @WHERE'

SET @WHERE = ISNULL(' WHERE ' + @WHERE, '');

EXECUTE sp_executesql 
    @statement = @sql
    , @params = N'@WHERE nvarchar(MAX)'
    , @WHERE = @WHERE;

我收到此错误,无法弄清楚原因......

  

Msg 102,Level 15,State 1,Line 6
  '@WHERE'附近的语法不正确。

1 个答案:

答案 0 :(得分:3)

您不能将where子句作为参数。

我建议你阅读MVP Erland Sommarskog关于这个主题的文章的this部分,以及整篇文章。

通过直接附加到SQL字符串,您可以在没有参数的情况下完成此工作,即使这不是一个好主意:

DECLARE @sql NVARCHAR(MAX) = NULL
DECLARE @WHERE NVARCHAR(MAX) = NULL

SET @sql = N'SELECT * FROM MyTable' + ISNULL(' WHERE ' + @WHERE, '');

EXECUTE sp_executesql @sql