Lea*_*ing 127 sql sql-server common-table-expression
我有一个MS SQL CTE查询,我想从中创建一个临时表.我不知道怎么做,因为它给出了一个Invalid Object name错误.
以下是整个查询供参考
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)
Run Code Online (Sandbox Code Playgroud)
我希望在正确的方向上有一点,或者我是否可以从此CTE查询创建临时表
小智 211
create table #Temp
(
EventID int,
EventTitle Varchar(50),
EventStartDate DateTime,
EventEndDate DatetIme,
EventEnumDays int,
EventStartTime Datetime,
EventEndTime DateTime,
EventRecurring Bit,
EventType int
)
Run Code Online (Sandbox Code Playgroud)
;WITH Calendar
AS (SELECT /*...*/)
Insert Into #Temp
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
Run Code Online (Sandbox Code Playgroud)
确保在使用后删除该表
If(OBJECT_ID('tempdb..#temp') Is Not Null)
Begin
Drop Table #Temp
End
Run Code Online (Sandbox Code Playgroud)
小智 128
实际上格式可以非常简单 - 有时不需要预定义临时表 - 它将根据select的结果创建.
Select FieldA...FieldN
into #MyTempTable
from MyTable
Run Code Online (Sandbox Code Playgroud)
因此,除非您需要不同的类型或对定义非常严格,否则请保持简单.另请注意,在存储过程完成执行时,将自动删除在存储过程中创建的任何临时表.如果存储过程A创建临时表并调用存储过程B,则B将能够使用A创建的临时表.
但是,通常认为良好的编码实践是显式删除您创建的每个临时表.
Mar*_*ith 22
该SELECT ... INTO需求是在从CTE的选择.
;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)
Run Code Online (Sandbox Code Playgroud)
小智 21
如何在存储过程中使用TempTable?
以下是步骤:
创建TEMP表
-- CREATE TEMP TABLE
Create Table #MyTempTable (
EmployeeID int
);
Run Code Online (Sandbox Code Playgroud)
将TEMP选择数据插入TEMP表
-- INSERT COMMON DATA
Insert Into #MyTempTable
Select EmployeeID from [EmployeeMaster] Where EmployeeID between 1 and 100
Run Code Online (Sandbox Code Playgroud)
SELECT TEMP TABLE(您现在可以使用此选择查询)
Select EmployeeID from #MyTempTable
Run Code Online (Sandbox Code Playgroud)
最后一步下降表
Drop Table #MyTempTable
Run Code Online (Sandbox Code Playgroud)
我希望这将有所帮助.简单明了:)
小智 7
Select Eventname,
count(Eventname) as 'Counts'
INTO #TEMPTABLE
FROM tblevent
where Eventname like 'A%'
Group by Eventname
order by count(Eventname)
Run Code Online (Sandbox Code Playgroud)
这里通过使用 into 子句直接创建表
这是对在执行时创建表的查询的答案的一个轻微改动(即您不必先创建表):
SELECT * INTO #Temp
FROM (
select OptionNo, OptionName from Options where OptionActive = 1
) as X
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1096348 次 |
| 最近记录: |