Ошибки преобразования Oracle в T-SQL CTE - PullRequest
0 голосов
/ 04 июня 2018

Проблемы с преобразованием синтаксиса 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 вернул следующие ошибки:

Сообщение 156, уровень 15,Состояние 1, строка 2 Неверный синтаксис рядом с ключевым словом «WITH».

Msg 319, Уровень 15, Состояние 1, строка 2 Неверный синтаксис рядом с ключевым словом «with».Если этот оператор является общим табличным выражением, предложением xmlnamespaces или предложением контекста отслеживания изменений, предыдущий оператор должен заканчиваться точкой с запятой.

Сообщение 102, уровень 15, состояние 1, строка 11 Неправильный синтаксис рядом с ') '.

1 Ответ

0 голосов
/ 04 июня 2018

SQL Server не допускает CTE в подзапросе :

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...