我想知道这是否可行。我有一个使用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子句,则必须以分号结束前一个语句。
我尝试用不同的语法做什么?
答案 0 :(得分:56)
您需要在INSERT INTO
之后放置CTE
。所以代码将是:
;WITH alias (y,z)
AS
(
SELECT y,z FROM tableb
)
INSERT INTO tablea(a,b)
SELECT y, z
FROM alias
答案 1 :(得分:0)
不使用CTE
的另一种方法是将其包装在子查询中,
INSERT INTO tablea(a,b)
SELECT y, z
FROM
(
SELECT y,z FROM tableb
) alias
答案 2 :(得分:0)
分号用于终止语句。因此,当您使用; WITH时,终止前一个语句。但是,这不是你在这里得到错误的原因。这里的问题是你的INSERT INTO语句,它正在寻找VALUES或SELECT语法。
INSERT INTO语句可以通过两种方式使用 - 通过显式提供VALUES或使用SELECT语句提供结果集。