Oracle到T-SQL CTE转换错误

时间:2018-06-04 16:16:17

标签: sql sql-server oracle tsql

无法将Oracle语法转换为T-SQL。试图转换以下声明:

SELECT *
FROM (WITH NEW_USERS AS (SELECT WPP.USER_ID
                         FROM DSS_ERS_STAGE.ES_W_PARTICIPANT_DIM WPP
                       MINUS
                       SELECT PP.USER_ID FROM DSS_ERS_STAGE.ES_PARTICIPANT_DIM PP)
     SELECT EWP.USER_ID
           ,EWP.CANDIDATE_1_0_FLAG
       FROM DSS_ERS_STAGE.ES_W_PARTICIPANT_DIM EWP
      INNER JOIN NEW_USERS N
         ON (EWP.USER_ID = N.USER_ID)
      WHERE EWP.CANDIDATE_1_0_FLAG = 1)

转化尝试:

SELECT *
FROM (WITH NEW_USERS AS (SELECT WPP.USER_ID
                         FROM DSS_ERS_STAGE.ES_W_PARTICIPANT_DIM WPP
                       EXCEPT
                       SELECT PP.USER_ID FROM DSS_ERS_STAGE.ES_PARTICIPANT_DIM PP)
     SELECT EWP.USER_ID
           ,EWP.CANDIDATE_1_0_FLAG
       FROM DSS_ERS_STAGE.ES_W_PARTICIPANT_DIM EWP
      INNER JOIN NEW_USERS N
         ON (EWP.USER_ID = N.USER_ID)
      WHERE EWP.CANDIDATE_1_0_FLAG = 1) 

SQL Server返回以下错误:

  

第15行,第1行,第2行   关键字“WITH”附近的语法不正确。

     

Msg 319,Level 15,State 1,Line 2   关键字'with'附近的语法不正确。如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则必须以分号结束前一个语句。

     

Msg 102,Level 15,State 1,Line 11   ')'附近的语法不正确。

1 个答案:

答案 0 :(得分:2)

SQL Server不允许使用CTE in subquery

WITH NEW_USERS AS (SELECT WPP.USER_ID
                   FROM DSS_ERS_STAGE.ES_W_PARTICIPANT_DIM WPP
                   EXCEPT    -- Oracle has MINUS
                   SELECT PP.USER_ID 
                   FROM DSS_ERS_STAGE.ES_PARTICIPANT_DIM PP)
SELECT EWP.USER_ID
       ,EWP.CANDIDATE_1_0_FLAG
FROM DSS_ERS_STAGE.ES_W_PARTICIPANT_DIM EWP
INNER JOIN NEW_USERS N
   ON (EWP.USER_ID = N.USER_ID)
WHERE EWP.CANDIDATE_1_0_FLAG = 1;

第二件事:SQL Server有EXCEPT个关键字,而不是MINUS