SP中with后面是否可以接IF语句

jiujiang88 2012-12-18 04:52:53
问题抽象如下:

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'.
如果不能请提示如何更改,谢谢。
...全文
347 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
我腫了 2012-12-18
  • 打赏
  • 举报
回复
或者你把Cte生成的數據放進臨時表,然後再使用IF語句.
我腫了 2012-12-18
  • 打赏
  • 举报
回复
引用 9 楼 jiujiang88 的回复:
哦,原来WITH语句后面不能跟程序流控制语句,你们两个地方法都能实现,但我条件控制太复杂了,用你们滴方法不好写,我还是拼SQL执行了。
參考10樓,把IF語句寫進Where就行了.
我腫了 2012-12-18
  • 打赏
  • 举报
回复
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)
jiujiang88 2012-12-18
  • 打赏
  • 举报
回复
哦,原来WITH语句后面不能跟程序流控制语句,你们两个地方法都能实现,但我条件控制太复杂了,用你们滴方法不好写,我还是拼SQL执行了。
我腫了 2012-12-18
  • 打赏
  • 举报
回复
不管在哪,with後面是不能加IF語句的.
-晴天 2012-12-18
  • 打赏
  • 举报
回复
或者说,with 后面只能跟SQL的语句,而不能跟程序流控制语句.
-晴天 2012-12-18
  • 打赏
  • 举报
回复
with 后面,只能跟查询语句,用我的那种方法,应该可以改到你的应用上,如果你的抽取是正确的话.
jiujiang88 2012-12-18
  • 打赏
  • 举报
回复
顺便问下,能给出错误滴原因吗?是因为WITH后面不能跟IF语句么?
jiujiang88 2012-12-18
  • 打赏
  • 举报
回复
楼上两位兄台,我是将问题抽离出来,你们两个地方法我也知道,只是由于条件很复杂不能采用,请问能根据我那个来进行更改么?
快溜 2012-12-18
  • 打赏
  • 举报
回复
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
-晴天 2012-12-18
  • 打赏
  • 举报
回复
结帖给分吧.
-晴天 2012-12-18
  • 打赏
  • 举报
回复
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

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧