2015-11-12 3 views
0

Я пытаюсь вставить результаты, полученные от SQL запроса во временную таблицу, используя следующий запрос:Как сохранить запрос привести к временной таблице

SELECT * 
INTO #YourTempTable 
FROM 
    (WITH cte AS 
    (
     SELECT 
      sb.case, sb.Trace, sb.Amount, sp.edge, sp.UserId, 
      count(*) over (partition by sp.edge) as cnt 
     FROM 
      Budget sb 
     JOIN 
      Sap sp ON sb.Trace = sp.Trace 
     WHERE 
      sb.Trace IN (SELECT Trace FROM Sap 
         WHERE sb.UserId in ('R5', 'HB')) 
    ) 
    SELECT cte.* 
    FROM cte 
    WHERE cnt > 1 
    ORDER BY edge DESC; 
) 

Я получаю сообщение об ошибке:

Msg 156, Level 15, State 1, Line 4
Incorrect syntax near the keyword 'with'.

Msg 319, Level 15, State 1, Line 4
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

Msg 102, Level 15, State 1, Line 12
Incorrect syntax near ')'.

Может кто-нибудь, пожалуйста, дайте мне знать об этом?

ответ

6

WITH идет перед SELECT:

with cte as (
     select sb.case, sb.Trace, sb.Amount, sp.edge, sp.UserId, 
      count(*) over (partition by sp.edge) as cnt 
     from Budget sb join 
      Sap sp 
      on sb.Trace = sp.Trace 
     where sb.Trace in (select Trace from Sap where sb.UserId in ('R5', 'HB')) 
    ) 
SELECT * 
INTO #YourTempTable 
FROM cte 
WHERE cnt > 1 
ORDER BY edge desc; 

Как примечание: ваш синтаксис является поддерживается Oracle, но не другими базами данных. В общем, WITH должен быть в самом начале инструкции.

Кроме того, подзапрос не нужен. Фактически, вы получите две дополнительные ошибки: в подзапросе нет псевдонима, а ORDER BY не разрешено в подзапросах (если не используется TOP или FETCH FIRST).

+0

Ускоренный отклик, и вы нашли больше сломанных вещей, чем я. Получает мое преимущество. – LDMJoe

+0

Создает ли временную таблицу в БД? Или таблица просто создана на лету? – user2961127

+0

@ пользователь2961127. , , SQL Server не материализует CTE (лучше или хуже). Логика просто включена в план выполнения. –

Смежные вопросы