问题抽象如下:CREATE PROCEDURE TESTT
(
 @Age int
)
AS
;WITH TEST AS
(
 SELECT * FROM INFO
)IF @Age<18
BEGIN
 SELECT * FROM TEST WHERE Age<18
END
ELSE IF @Age=18
BEGIN
 SELECT * FROM TEST WHERE Age=18
END
ELSE
SELECT * FROM TEST WHERE Age>18错误提示:
Incorrect syntax near the keyword 'IF'.
如果不能请提示如何更改,谢谢。

解决方案 »

  1.   

    CREATE PROCEDURE TESTT
    (
     @Age int
    )
    AS
    begin
    ;WITH TEST AS
    (
     SELECT * FROM INFO
    )
    select * from test where age<18 and @age<18
    union all
    select * from text where age=18 and @age=18
    union all
    select * from text where age>18 and @age>18
    end
      

  2.   


    CREATE PROCEDURE TESTT
    (
     @Age int
    )
    AS
     SELECT * into TEST FROM INFO
    IF @Age<18
    BEGIN
     SELECT * FROM TEST WHERE Age<18
    END
    ELSE IF @Age=18
    BEGIN
     SELECT * FROM TEST WHERE Age=18
    END
    ELSE
    SELECT * FROM TEST WHERE Age>18
    drop table TEST
      

  3.   

    顺便问下,能给出错误滴原因吗?是因为WITH后面不能跟IF语句么?
      

  4.   

    with 后面,只能跟查询语句,用我的那种方法,应该可以改到你的应用上,如果你的抽取是正确的话.
      

  5.   

    或者说,with 后面只能跟SQL的语句,而不能跟程序流控制语句.
      

  6.   

    不管在哪,with後面是不能加IF語句的.
      

  7.   

    哦,原来WITH语句后面不能跟程序流控制语句,你们两个地方法都能实现,但我条件控制太复杂了,用你们滴方法不好写,我还是拼SQL执行了。
      

  8.   

    CREATE PROCEDURE TESTT
    (
     @Age int
    )
    AS
    ;WITH TEST AS
    (
     SELECT * FROM INFO
    )
    SELECT 
        * 
    FROM TEST 
    WHERE (Age<18 AND @Age<18) 
        OR (Age=18 AND @Age=18)
        OR (Age>18 AND @Age>18)
      

  9.   

    參考10樓,把IF語句寫進Where就行了.
      

  10.   

    或者你把Cte生成的數據放進臨時表,然後再使用IF語句.