임시 테이블을 만들려는 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)
올바른 방향으로 포인트를 주시거나이 CTE 쿼리에서 임시 테이블을 만들 수 있다면 감사하겠습니다.
답변
샘플 DDL
create table #Temp
(
EventID int,
EventTitle Varchar(50),
EventStartDate DateTime,
EventEndDate DatetIme,
EventEnumDays int,
EventStartTime Datetime,
EventEndTime DateTime,
EventRecurring Bit,
EventType int
)
;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
사용 후 테이블이 삭제되었는지 확인하십시오
If(OBJECT_ID('tempdb..#temp') Is Not Null)
Begin
Drop Table #Temp
End
답변
실제로 형식은 매우 간단 할 수 있습니다. 때로는 임시 테이블을 사전 정의 할 필요가 없습니다. 선택 결과에서 생성됩니다.
Select FieldA...FieldN
into #MyTempTable
from MyTable
따라서 다른 유형을 원하거나 정의가 매우 엄격하지 않은 한 간단하게 유지하십시오. 또한 저장 프로 시저 내부에서 생성 된 임시 테이블은 저장 프로 시저 실행이 완료되면 자동으로 삭제됩니다. 스토어드 프로 시저 A가 임시 테이블을 작성하고 스토어드 프로 시저 B를 호출하면 B는 A가 작성한 임시 테이블을 사용할 수 있습니다.
그러나 일반적으로 생성하는 모든 임시 테이블을 명시 적으로 삭제하는 것이 일반적으로 좋은 코딩 관행으로 간주됩니다.
답변
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)
답변
저장 프로 시저에서 TempTable을 사용하는 방법은 무엇입니까?
단계는 다음과 같습니다.
TEMP TABLE 생성
-- CREATE TEMP TABLE
Create Table #MyTempTable (
EmployeeID int
);
TEMP 테이블에 TEMP SELECT 데이터 삽입
-- INSERT COMMON DATA
Insert Into #MyTempTable
Select EmployeeID from [EmployeeMaster] Where EmployeeID between 1 and 100
SELECT TEMP TABLE (이 선택 쿼리를 사용할 수 있습니다)
Select EmployeeID from #MyTempTable
최종 단계 삭제 테이블
Drop Table #MyTempTable
이것이 도움이되기를 바랍니다. 간단하고 명확한 🙂
답변
Select Eventname,
count(Eventname) as 'Counts'
INTO #TEMPTABLE
FROM tblevent
where Eventname like 'A%'
Group by Eventname
order by count(Eventname)
여기에 into 절을 사용하여 테이블이 직접 작성됩니다.
답변
다음은 실행시 테이블을 생성하는 쿼리의 응답을 약간 변경 한 것입니다 (즉, 먼저 테이블을 생성 할 필요가 없음).
SELECT * INTO #Temp
FROM (
select OptionNo, OptionName from Options where OptionActive = 1
) as X