我有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
查询2:
With B as (Select S,T,U from Z)
Insert into File2
Select * from B
我意识到,从逻辑上讲,我总是需要同时生成File1和File2,因此我决定将这两个查询合并到一个存储过程中。但是,当我尝试这样做时,我遇到了一个问题,即在查询中只能有一个WITH子句。
因此,我在SO中发现了几个问题,人们在其中解释说,您只是使用逗号并有一个单独的WITH子句(尽管没有WITH),但这在我的示例中无法以任何形式使用。
这不是问题-我已经通过使用临时表等轻松地解决了这个问题。但是我真的对为什么在同一Proc中不能拥有两个完全不相关的WITH子句感到好奇?
有人可以解释吗?
答案 0 :(得分: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
如果您尝试做两个没有分号的错误,这是您从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.