一時テーブルを作成したい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クエリから一時テーブルを作成できるかどうかを評価します。
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 SELECT DATAをTEMP TABLEに挿入する
-- INSERT COMMON DATA
Insert Into #MyTempTable
Select EmployeeID from [EmployeeMaster] Where EmployeeID between 1 and 100
SELECT TEMP TABLE(このSELECTクエリを使用できるようになりました)
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句を使用することで、テーブルが直接作成されます