【问题标题】:How to save a queried CTE output into a temporary table or table variable如何将查询到的 CTE 输出保存到临时表或表变量中
【发布时间】:2015-11-27 19:33:45
【问题描述】:

我有一个CTE 并查询这个

;With CTE_Table as (SELECT ...)
Select * from CTE_Table

现在我尝试将此结果保存到table variabletemporary table。如果我尝试

Declare @Table table
(...)
INSERT INTO @Table (...)
HER I PUT THE CODE ABOVE

我在WITH 语句周围得到一个incorrect syntax error。我猜Insert Into 命令需要Select statement 而不是;WITHCreate Table 也是如此。我一直在寻找解决方案,但所有I found 都没有涉及;With 之后的Select Statement。如何将上面显示的输出转换为temporary tabletable variable

我使用 SQL Server 2014。

【问题讨论】:

  • 启动 CTE 的关键字是 with 而不是 ;with
  • @a_horse_with_no_name 真的吗?
  • @Frisbee:是的,请参阅 Mikael 的答案以正确使用语句 termination 字符
  • @a_horse_with_no_name 终结符不依赖于行。您可以将其移至“with”行。 ;with 不是关键字。它是一个终止符,后跟一个关键字。
  • @Frisbee:我知道。但是写;with 的固定模式显然让很多人认为CTE 是通过使用;with 开始的,参见例如像这样的问题:stackoverflow.com/q/11491240/330315 或这个stackoverflow.com/q/26670414/330315 以及这个问题的写作方式给我的印象是 ruedi 也认为 CTE 需要以 ;with 开头

标签: sql tsql common-table-expression sql-server-2014 table-variable


【解决方案1】:

在 CTE 声明之后将插入语句添加到主查询。

declare @T table(ID int);

with C(ID) as
(
  select 1 union all
  select 2
)
insert into @T(ID)
select ID
from C;

select ID
from @T;

【讨论】:

    【解决方案2】:
    DECLARE @t table(
    Name nvarchar(MAX),
    Id bigint
    )
    
    ;WITH CTE as (
        SELECT 'Name' as Name , 1 as Id
    )
    INSERT INTO @t(Name,Id)
    SELECT Name,Id FROM CTE
    
    
    SELECT * FROM @t
    

    【讨论】:

      猜你喜欢
      • 2021-10-20
      • 2012-06-25
      • 2018-07-06
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 2021-11-09
      相关资源
      最近更新 更多