Синтаксическая ошибка 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;

Я получаю эту ошибку и не могу понять, почему...

Сообщение 102, уровень 15, состояние 1, строка 6
Неверный синтаксис рядом с '@WHERE'.


person TTCG    schedule 10.04.2014    source источник


Ответы (1)


У вас не может быть предложения where в качестве параметра.

Я рекомендую вам прочитать этот раздел статьи MVP Эрланда Соммарскога на эту тему, а также всю статью целиком. в целом.

Вы можете заставить это работать без параметра, даже если это не очень хорошая идея, добавив напрямую к вашей строке SQL:

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

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

EXECUTE sp_executesql @sql
person Bridge    schedule 10.04.2014