【问题标题】:Insert into a Temp Table in a CTE在 CTE 中插入临时表
【发布时间】:2014-06-03 05:54:45
【问题描述】:

我正在尝试将数据插入到 CTE 中的临时表中。这是我正在使用的代码:有人可以就它为什么不起作用提供一些指导。

Create Table #Clients
(HospMastID smallint    Null
,HospCode   smallint    Null
,ClientID   smallint    Null
,ControlGroup   smallint Null);

,Clients
as
    (Insert Into #Clients
    Select 
    Distinct
    HospMastID
    ,HospCode
    ,ClientID
    From
    Final)

谢谢, 斯科特

【问题讨论】:

    标签: sql-server-2008 common-table-expression temp-tables


    【解决方案1】:
    Create Table #Clients1
    (standardid int Null
    ,fullnumber Varchar(200) Null
    ,description Varchar(1000) Null);
    
    WITH standard_cte AS ( 
    SELECT standardid, fullnumber, 
    description FROM standard WHERE standardid = 1370 
    UNION ALL 
    SELECT s.standardid, s.fullnumber, s.description FROM standard s 
    INNER JOIN standard_cte ON standard_cte.standardid = s.parentid ) 
    
    Insert Into #Clients1(standardid ,fullnumber, description )
    SELECT tempTable.standardid, fullnumber, description
    FROM ( SELECT standardid, fullnumber, CONVERT(VARCHAR(MAX), description) as description FROM standard_cte WHERE standardid <> 1370 ) tempTable 
    
    GROUP BY tempTable.StandardID, fullnumber, description
    
    select * from #Clients1
    
    drop table #Clients1
    

    【讨论】:

    • 这只是使用 CTE 的更大查询的一小部分。我需要 CTE 在这一点上继续。在我插入表格后,我有更多需要运行的 CTE。如果这是有道理的。我不想给出整个查询,因为它很长。
    【解决方案2】:

    简单地说,您不能在 CTE 中使用 INSERT 函数。假设“Final”是多 CTE 脚本中的其他 CTE 之一,只需将 INSERT INTO #Clients 移到 CTE 脚本之外。您似乎不需要临时表,因为您使用的是 CTE,所以客户端 CTE 将是可用的临时表或没有。我建议完全摆脱临时表并继续使用您已有的 CTE 方法。您可能需要发布更多脚本以获得更好的问题范围。

     ,Clients as
         (Select 
         Distinct
         HospMastID
         ,HospCode
         ,ClientID
         From
        Final)
    

    【讨论】:

    • 我就是这么想的。我要做的是选择所有客户端,然后从这些客户端中添加一个控制组。这不是问题,但是当我尝试将两个 CTE 连接在一起时需要一个多小时,我认为临时表可能会更快。每件作品只需要大约 3 分钟即可运行。但加入是永远的。修改查询以显示后续步骤。
    • @SASUSMC 您能否检查我的回答是否已回答,因为它确实回答了问题“在 CTE 中插入临时表”的原始范围。谢谢,icvader。
    【解决方案3】:
    CREATE TABLE #Clients (
          HospMastID    SMALLINT    NULL
        , HospCode      SMALLINT    NULL
        , ClientID      SMALLINT    NULL
        , ControlGroup  SMALLINT    NULL
    )
    
    WITH Clients (HospMastID, HospCode, ClientID)
    AS
    (
        SELECT DISTINCT HospMastID, HospCode, ClientID
        FROM Final
    )
    INSERT INTO #Clients
    SELECT HospMastID, HospCode, ClientID
    FROM Clients 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-03
      • 2022-01-09
      • 2018-01-13
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 2016-01-31
      • 2012-08-19
      相关资源
      最近更新 更多