40

我想知道这是否可能。我有一个现有的查询,它使用该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 子句,则前面的语句必须以分号结束。

我正在尝试用不同的一些不同的语法来做可能的事情吗?

4

3 回答 3

77

您需要INSERT INTOCTE. 所以代码将是:

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

请参阅带有演示的 SQL Fiddle

于 2013-03-22T15:38:48.863 回答
1

不使用 a 的另一种方法CTE是将其包装在子查询中,

INSERT INTO tablea(a,b)
SELECT y, z 
FROM 
(
    SELECT y,z FROM tableb
) alias
于 2013-03-22T15:41:55.090 回答
0

分号用于终止语句。因此,当您使用 ;WITH 时,会终止前一个语句。但是,这不是您在此处收到错误的原因。这里的问题在于您的 INSERT INTO 语句,该语句正在寻找 VALUES 或 SELECT 语法。

INSERT INTO 语句可以以两种方式使用 - 通过显式提供 VALUES 或通过使用 SELECT 语句提供结果集。

于 2013-09-12T13:02:45.230 回答