代码之家  ›  专栏  ›  技术社区  ›  Ivan-Mark Debono

“if”附近有语法错误

  •  0
  • Ivan-Mark Debono  · 技术社区  · 5 年前

    我有以下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”附近有语法错误

    “如果”在电话线上:

    如果(null if(@filter,“”为空)

    为什么会出现此错误,以及如何正确地制定上述SQL语法?

    2 回复  |  直到 5 年前
        1
  •  1
  •   Derviş Kayımbaşıoğlu    5 年前

    内部if语句位置错误。with格式为

    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
    
        2
  •  0
  •   Víctor Beltrán    5 年前

    CTE需要在“if(null if(@filter,”)为空)”中。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