将两个CTE与UNION组合会导致错误

时间:2018-08-19 11:30:56

标签: sql sql-server common-table-expression

出现以下错误:

  

'消息156,第15层,状态1,第53行
  关键字“ WITH”附近的语法不正确。

     

Msg 319,第15级,第1行,第53行
  关键字“ with”附近的语法不正确。如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则前一条语句必须以分号终止。'

单独运行CTE可以。但是,当使用UNION组合时,则会出现错误。

With cte1 as 
(
    select
       .
       .
       .

    Select

    from

)
select

UNION

With cte2 as 
(
    Select

    From
)
Select 

from

1 个答案:

答案 0 :(得分:5)

在SQL Server中,CTE连接到最外面的select。换句话说,每个查询只有一个,并且所有定义都必须在select之前。

因此将它们合并为一个with

with cte1 as (
      select . . . 
     ),
     cte2 as (
      select . . .
     )
select . . .
from cte1 . . . 
union
select  . . 
from cte2 . . .;