多个SQL WITH子句 - 为什么不呢?

Lef*_*fty -1 sql t-sql sql-server

我有2个单独的查询.

查询1:

With A as (Select P,Q,R from X union all Select P,Q,R from Y)
Insert into File1
Select * from A
Run Code Online (Sandbox Code Playgroud)

查询2:

With B as (Select S,T,U from Z)
Insert into File2
Select * from B
Run Code Online (Sandbox Code Playgroud)

我意识到,从逻辑上讲,我总是需要一起生成File1和File2,所以我决定将2个查询合并为一个存储过程.但是,当我尝试这样做时,我遇到了这个问题,它只能在查询中有一个WITH子句.

所以,我在SO中发现了一些问题,其中人们解释说你只是使用逗号并且有一个单独的WITH子句(尽管没有WITH)但是这对我的例子来说不适用于任何形式.

这不是问题 - 我很容易通过使用临时表等解决它.但我真的很感兴趣为什么我不能在同一个Proc中有两个完全不相关的WITH子句?

有人可以解释一下吗?

小智 5

您应该能够拥有2个WITH子句,在第一个之后只需要一个分号.

With A as (Select P,Q,R from X union all Select P,Q,R from Y)
Insert into File1
Select * from A;


With B as (Select S,T,U from Z)
Insert into File2
Select * from B
Run Code Online (Sandbox Code Playgroud)

如果您尝试在没有分号的情况下执行两个操作,那么这是您从SQL获得的错误:

Msg 336, Level 15, State 1, Line 6
Incorrect syntax near 'B'. If this is intended to be a common table expression, you need to explicitly terminate the previous statement with a semi-colon.
Run Code Online (Sandbox Code Playgroud)