Неверный синтаксис рядом с 'IF' - PullRequest
0 голосов
/ 08 января 2019

У меня есть следующий SP (уменьшен для ясности):

CREATE PROCEDURE sp
    @id int,
    @filter varchar(255) = NULL
AS
BEGIN
    IF (NULLIF(@id, 0) IS NOT NULL)
    BEGIN
        WITH cte AS
        (
            --SELECT here...
        )

        IF (NULLIF(@filter, '') IS NULL)
        BEGIN
            SELECT *
            FROM cte;
        END
    END
END

Я получаю ошибку:

Неверный синтаксис рядом с 'IF'

«Если» на линии:

ЕСЛИ (NULLIF (@filter, '') НЕДЕЙСТВИТЕЛЕН)

Почему я получаю эту ошибку и как правильно сформулировать приведенный выше синтаксис SQL?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Внутреннее утверждение If находится не в том месте. Формат с

With <col> as 
(
  ---
)
SELECT ---

Кроме того, я не думаю, что у Нуллифа есть цель здесь. В общем, если вы можете писать без использования функции, не используйте функцию (из соображений производительности)

Окончательная процедура будет:

CREATE PROCEDURE sp
    @id int,
    @filter varchar(255) = NULL
AS
BEGIN
    IF (@id != 0)
    BEGIN
        IF (@filter = '')
        BEGIN
            WITH cte AS
            (
                --SELECT here...
            )
            SELECT *
            FROM cte;
        END
    END
END
0 голосов
/ 08 января 2019

CTE должен быть внутри "IF (NULLIF (@filter, '') NULL)". CTE должен использоваться сразу после создания. Это должно работать:

CREATE PROCEDURE sp
    @id int,
    @filter varchar(255) = NULL
AS
BEGIN
    IF (NULLIF(@id, 0) IS NOT NULL)
    BEGIN
        IF (NULLIF(@filter, '') IS NULL)
        BEGIN
            WITH cte AS
            (
                --SELECT here...
            )
            SELECT *
            FROM cte;
        END
    END
END
...