0

我正在尝试学习和使用,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;

我收到此错误,无法弄清楚为什么...

消息 102,级别 15,状态 1,第 6 行
“@WHERE”附近的语法不正确。

4

1 回答 1

3

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

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

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

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

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

EXECUTE sp_executesql @sql
于 2014-04-10T16:00:37.447 回答