首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用SELECT * INTO tempTable FROM CTE查询创建临时表

如何使用SELECT * INTO tempTable FROM CTE查询创建临时表
EN

Stack Overflow用户
提问于 2012-07-15 18:45:41
回答 6查看 1.5M关注 0票数 208

我有一个MS SQL CTE查询,我想从它创建一个临时表。我不确定该怎么做,因为它会给出一个Invalid Object name错误。

以下是整个查询以供参考

代码语言:javascript
复制
SELECT * INTO TEMPBLOCKEDDATES FROM 
;with Calendar as (
    select EventID, EventTitle, EventStartDate, EventEndDate, EventEnumDays,EventStartTime,EventEndTime, EventRecurring, EventStartDate as PlannedDate
    ,EventType from EventCalender
    where EventActive = 1 AND LanguageID =1 AND EventBlockDate = 1
    union all
    select EventID, EventTitle, EventStartDate, EventEndDate, EventEnumDays,EventStartTime,EventEndTime, EventRecurring, dateadd(dd, 1, PlannedDate)
    ,EventType from Calendar
    where EventRecurring = 1
        and dateadd(dd, 1, PlannedDate) <= EventEndDate 
)
select EventID, EventStartDate, EventEndDate, PlannedDate as [EventDates], Cast(PlannedDate As datetime) AS DT, Cast(EventStartTime As time) AS ST,Cast(EventEndTime As time) AS ET, EventTitle
,EventType from Calendar
where (PlannedDate >= GETDATE()) AND ',' + EventEnumDays + ',' like '%,' + cast(datepart(dw, PlannedDate) as char(1)) + ',%'
    or EventEnumDays is null
order by EventID, PlannedDate
option (maxrecursion 0)

如果我能从这个CTE查询中创建一个临时表,我将不胜感激

EN

回答 6

Stack Overflow用户

发布于 2014-01-06 09:50:38

实际上,格式可以非常简单-有时不需要预定义临时表-它将从select的结果创建。

代码语言:javascript
复制
Select FieldA...FieldN 
into #MyTempTable 
from MyTable

因此,除非你想要不同的类型,或者对定义非常严格,否则请保持简单。另请注意,在存储过程中创建的任何临时表都会在存储过程执行完毕时自动删除。如果存储过程A创建了一个临时表并调用了存储过程B,那么B将能够使用A创建的临时表。

然而,显式地删除您创建的每个临时表通常被认为是很好的编码实践。

票数 204
EN

Stack Overflow用户

发布于 2017-11-07 04:13:07

如何在存储过程中使用TempTable?

以下是步骤:

创建临时表

代码语言:javascript
复制
-- CREATE TEMP TABLE 
Create Table #MyTempTable (
    EmployeeID int
);

在临时表中插入临时选择数据

代码语言:javascript
复制
-- INSERT COMMON DATA
Insert Into #MyTempTable
Select EmployeeID from [EmployeeMaster] Where EmployeeID between 1 and 100

SELECT TEMP表(现在可以使用此select查询)

代码语言:javascript
复制
Select EmployeeID from #MyTempTable

最后一步删除表

代码语言:javascript
复制
Drop Table #MyTempTable

我希望这能有所帮助。简单明了:)

票数 33
EN

Stack Overflow用户

发布于 2012-07-15 18:54:45

SELECT ... INTO需要在从CTE中选择。

代码语言:javascript
复制
;WITH Calendar
     AS (SELECT /*... Rest of CTE definition removed for clarity*/)
SELECT EventID,
       EventStartDate,
       EventEndDate,
       PlannedDate                   AS [EventDates],
       Cast(PlannedDate AS DATETIME) AS DT,
       Cast(EventStartTime AS TIME)  AS ST,
       Cast(EventEndTime AS TIME)    AS ET,
       EventTitle,
       EventType
INTO TEMPBLOCKEDDATES /* <---- INTO goes here*/        
FROM   Calendar
WHERE  ( PlannedDate >= Getdate() )
       AND ',' + EventEnumDays + ',' LIKE '%,' + Cast(Datepart(dw, PlannedDate) AS CHAR(1)) + ',%'
        OR EventEnumDays IS NULL
ORDER  BY EventID,
          PlannedDate
OPTION (maxrecursion 0) 
票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11491240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档