Ответ 1
Вам нужно будет поместить INSERT INTO
сразу после CTE
. Таким образом, код будет:
;WITH alias (y,z)
AS
(
SELECT y,z FROM tableb
)
INSERT INTO tablea(a,b)
SELECT y, z
FROM alias
Мне было интересно, возможно ли это. У меня есть существующий запрос, который использует предложение 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, предыдущий оператор должен быть прерван точкой с запятой.
Я пытаюсь сделать это с помощью разных синтаксисов?
Вам нужно будет поместить INSERT INTO
сразу после CTE
. Таким образом, код будет:
;WITH alias (y,z)
AS
(
SELECT y,z FROM tableb
)
INSERT INTO tablea(a,b)
SELECT y, z
FROM alias
Другой способ, не используя CTE
, - обернуть его в подзапрос,
INSERT INTO tablea(a,b)
SELECT y, z
FROM
(
SELECT y,z FROM tableb
) alias
Точка с запятой используется для завершения утверждения. Поэтому, когда вы используете WITH, завершает предыдущий оператор. Однако, это не то, почему вы получаете ошибку здесь. Проблема здесь в инструкции INSERT INTO, которая ищет синтаксис VALUES или SELECT.
Инструкция INSERT INTO может использоваться двумя способами - путем предоставления VALUES явно или путем предоставления набора результатов с помощью инструкции SELECT.