【问题标题】:insert into temp table using Cross Apply?使用交叉应用插入临时表?
【发布时间】:2015-06-12 09:04:53
【问题描述】:

我想创建一个临时表并根据选择插入值。查询不执行,我错过了什么?我最终想通过临时表循环

Create Table #temp (ID varchar(25),Source_Id varchar(25),Processed   varchar(25), Status varchar(25),Time_Interval_Min varchar(25))
Insert into #temp   
Select t.*
From
   (SELECT DISTINCT source_id 
    FROM Activity_WorkLoad) t1
    CROSS APPLY 
   (
    SELECT TOP 1
      aw.ID,
      Source_Id 
      ,Processed 
      ,Status 
      ,Time_Interval_Min
   FROM [dbSDS].[dbo].[Activity_WorkLoad] aw
   JOIN [dbSDS].[dbo].[SDA_Schedule_Time] st ON aw.SDA_Resource_ID = st.ID
   WHERE aw.Source_Id = t1.Source_Id AND aw.Status = 'Queued'
   ORDER BY Processed DESC  
   )t

【问题讨论】:

  • “查询没有执行”:你遇到了什么错误?
  • 您正在选择t.*,但t 中只有一列,您没有指定将其放入哪一列。很确定这个查询不会做你真正想做的事情。你为什么不问这个问题?

标签: sql sql-server-2012 temp-tables


【解决方案1】:

当你cross apply时,你仍然需要一个别名:

Insert into #temp   (id, source_id, processed, status, time_interval_min)
    Select tt.*
    From (SELECT DISTINCT source_id 
          FROM Activity_WorkLoad
         ) t CROSS APPLY 
         (SELECT TOP 1 aw.ID, Source_Id, Processed, Status, Time_Interval_Min
          FROM [dbSDS].[dbo].[Activity_WorkLoad] aw JOIN 
               [dbSDS].[dbo].[SDA_Schedule_Time] st
               ON aw.SDA_Resource_ID = st.ID
          WHERE aw.Source_Id = t.Source_Id AND aw.Status = 'Queued'
          ORDER BY Processed DESC  
        ) tt;

我还假设您想要第二个子查询的结果,而不是第一个,因为第一个子查询没有足够的列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多