【问题标题】:Insert Into Table Variable CTE插入表变量 CTE
【发布时间】:2014-05-26 09:57:12
【问题描述】:

如何将 cte 的结果插入到表变量中

这样的?

DECLARE
       @myData TABLE( 
                        Title nvarchar(350) NOT NULL , 
                        Id int NOT NULL ,
                    );
INSERT INTO @myData

with CTE as 
    (SELECT       
      a.Title 
     ,a.Id
  FROM
       TableA
     )
    ,CTE2 as 
    (SELECT  
      b.Title
     ,b.Id   
  FROM
       TableB
    )

    Select * From CTE

    union all

    Select * From CTE2

    Select  ROW_NUMBER() OVER(ORDER BY GetDate() DESC) AS RowId
       , x.* 
       From @myData x
       order by x.Id desc

【问题讨论】:

    标签: sql-server-2008 tsql sql-server-2012


    【解决方案1】:

    试试这个

    with CTE as 
        (SELECT       
          a.Title 
         ,a.Id
      FROM
           TableA
         )
        ,CTE2 as 
        (SELECT  
          b.Title
         ,b.Id   
      FROM
           TableB
        )
        INSERT INTO @myData  --- insert statement goes here after CTE
    
        Select * From CTE    
        union all    
        Select * From CTE2
    
        Select  ROW_NUMBER() OVER(ORDER BY GetDate() DESC) AS RowId, x.* 
        From @myData x
        order by x.Id desc
    

    【讨论】:

      【解决方案2】:

      在我的 SQL2019 版本中,上述构造没有插入任何字段。更糟糕的是,如果我想在语句之后使用 UPDATE,就会出现语法错误。

      相反,这个结构也在存储过程中工作:

      ; WITH CTE AS (
        select ...
        UNION ALL
        select ...
      )
      insert into @tableVariable(fields..) (select field... from CTE)
      

      希望有人会利用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-09
        • 2014-07-23
        • 2014-06-03
        • 1970-01-01
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        相关资源
        最近更新 更多