'IF'附近的语法不正确

时间:2019-01-08 09:00:08

标签: sql-server sql-server-2016

我有以下SP(为清晰起见,已缩小):

private void toolStripButton4_Click(object sender, EventArgs e)
        {
            toolStrip1.Items[0].BackColor = SystemColors.ActiveCaption;
            toolStrip1.Items[1].BackColor = SystemColors.Control;
            toolStrip1.Items[2].BackColor = SystemColors.Control;
            toolStrip1.Items[3].BackColor = SystemColors.Control;

        }

我得到了错误:

  

'IF'附近的语法不正确

'IF'在行中

  

IF(NULLIF(@filter,'')为NULL)

为什么会出现此错误,以及表达以上SQL语法的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

内部If语句放置在错误的位置。 with格式为

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

此外,我认为NULLIF在这里没有目的。通常,如果可以在不使用函数的情况下进行编写,则不要使用函数(出于性能方面的考虑)

最终程序将是:

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

答案 1 :(得分:0)

CTE必须位于“ IF(NULLIF(@filter,'')IS 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