Подтвердить что ты не робот

SQL Server - использование предложения WITH в инструкции INSERT

Мне было интересно, возможно ли это. У меня есть существующий запрос, который использует предложение WITH для применения некоторых агрегированных данных к запросу SELECT, например: (упрощенно)

;WITH alias (y,z)
AS
(
    SELECT y,z FROM tableb
)
SELECT y, z FROM alias

Теперь я хочу INSERT получить результаты этого запроса в другую таблицу.

Я пробовал следующее:

INSERT INTO tablea(a,b)
;WITH alias (y,z)
AS
(
    SELECT y,z FROM tableb
)
SELECT y, z FROM alias

но я получаю ошибку:

Неправильный синтаксис около ';'.

Итак, я пробовал без точки с запятой, но получил ошибку:

Неправильный синтаксис рядом с ключевым словом "WITH".

Неправильный синтаксис рядом с ключевым словом 'with'. Если этот оператор является общим табличным выражением или предложением xmlnamespaces, предыдущий оператор должен быть прерван точкой с запятой.

Я пытаюсь сделать это с помощью разных синтаксисов?

4b9b3361

Ответ 1

Вам нужно будет поместить INSERT INTO сразу после CTE. Таким образом, код будет:

;WITH alias (y,z)
AS
(
    SELECT y,z FROM tableb
)
INSERT INTO tablea(a,b)
SELECT y, z 
FROM alias

См. SQL Fiddle with Demo

Ответ 2

Другой способ, не используя CTE, - обернуть его в подзапрос,

INSERT INTO tablea(a,b)
SELECT y, z 
FROM 
(
    SELECT y,z FROM tableb
) alias

Ответ 3

Точка с запятой используется для завершения утверждения. Поэтому, когда вы используете WITH, завершает предыдущий оператор. Однако, это не то, почему вы получаете ошибку здесь. Проблема здесь в инструкции INSERT INTO, которая ищет синтаксис VALUES или SELECT.

Инструкция INSERT INTO может использоваться двумя способами - путем предоставления VALUES явно или путем предоставления набора результатов с помощью инструкции SELECT.