怎么对应不同参数定义不同的cte

geniuswjt 2011-11-14 02:21:38

--RT,举例如下:
declare @mode int
set @mode=1

if @mode=0
;with w0 as(
select 0
)
else if @mode=1
;with w0 as(
select 1
)
else if @mode=2
;with w0 as(
select 2
)

/*
报错:
消息 102,级别 15,状态 1,第 5 行
';' 附近有语法错误。
消息 156,级别 15,状态 1,第 8 行
关键字 'else' 附近有语法错误。
消息 102,级别 15,状态 1,第 9 行
';' 附近有语法错误。
消息 156,级别 15,状态 1,第 12 行
关键字 'else' 附近有语法错误。
消息 102,级别 15,状态 1,第 13 行
';' 附近有语法错误。
消息 102,级别 15,状态 1,第 15 行
')' 附近有语法错误。

...全文
121 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
NBDBA 2011-11-14
  • 打赏
  • 举报
回复
sql server没有宏的语法,貌似宏也不是很好的语法。
--小F-- 2011-11-14
  • 打赏
  • 举报
回复
貌似cte定义完了必须马上引用?


必须的
中国风 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 geniuswjt 的回复:]

谢谢水锅

其实我是想先根据@mode定义cte
然后再定义另外一个或多个ctf,ctg之类的
然后把cte,ctf,ctg再连接查询,这样代码看着整洁些

貌似cte定义完了必须马上引用?
引用 3 楼 wufeng4552 的回复:

SQL code
--定义完没有引用cte
declare @mode int
set @mode=1

if @mode=0
……
[/Quote]
對,可用動態拼CTE語句
水族杰纶 2011-11-14
  • 打赏
  • 举报
回复
CTE仅存在于外部查询中
对于同一批处理中的其它语句不可见
geniuswjt 2011-11-14
  • 打赏
  • 举报
回复
谢谢水锅

其实我是想先根据@mode定义cte
然后再定义另外一个或多个ctf,ctg之类的
然后把cte,ctf,ctg再连接查询,这样代码看着整洁些

貌似cte定义完了必须马上引用?
[Quote=引用 3 楼 wufeng4552 的回复:]

SQL code
--定义完没有引用cte
declare @mode int
set @mode=1

if @mode=0
begin
;with [w0] as(
select 0 col
)
SELECT * FROM [w0]
END
else if @mode=1
begin
;with [w0] as(
s……
[/Quote]
水族杰纶 2011-11-14
  • 打赏
  • 举报
回复
--定义完没有引用cte
declare @mode int
set @mode=1

if @mode=0
begin
;with [w0] as(
select 0 col
)
SELECT * FROM [w0]
END
else if @mode=1
begin
;with [w0] as(
select 1 col
)
SELECT * FROM [w0]
end
else if @mode=2
begin
;with [w0] as(
select 2 col
)
SELECT * FROM [w0]
end
geniuswjt 2011-11-14
  • 打赏
  • 举报
回复
额,可能举的例子太特殊
cte里装的都是不同的select出来的结果集
跟mode没有对应关系,是不同条件的结果集
我只是拿select 1代表这是个结果集

估计cte使用方法不让这样用?头大[Quote=引用 1 楼 wufeng4552 的回复:]

为什么不
with w0 as(
select @mode
[/Quote]
水族杰纶 2011-11-14
  • 打赏
  • 举报
回复
为什么不
with w0 as(
select @mode

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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