在 INSERT 语句中使用 WITH 子句

新手上路,请多包涵

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

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

原文由 Macs Dickinson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2k
2 个回答

您需要将 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

原文由 Taryn 发布,翻译遵循 CC BY-SA 3.0 许可协议

在我的情况下,建议的答案不适用,我可能认为这是 SQL Server 版本的一米,在我的情况下是 SQL Server 2016。或者,您可以通过以下代码片段使用临时表:

 ;WITH alias (y,z)
AS (SELECT y,z FROM tableb)
SELECT Y,Z
INTO #TEMP_TABLE
FROM alias

Z

原文由 Paolo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进