我需要使用循环多次SELECT INTO临时表但我不能这样做,因为在SELECT INTO创建的表之后你不能简单地在循环结束时删除表,因为你无法删除表并在同一批次中再次创建。
那么如何删除存储过程中的表并再次创建呢? 没有使用临时表可以吗?
这里是我实际使用临时表的片段,该表应该是一个旋转算法:
WHILE @offset<@NumDays BEGIN
SELECT
bg.*, j.ID, j.time, j.Status
INTO #TEMP1
FROM #TEMP2 AS bg
left outer join PersonSchedule j on bg.PersonID = j.PersonID and
j.TimeSlotDateTime = @StartDate + @offset
DROP TABLE #TEMP2;
SELECT * INTO #TEMP2 FROM #TEMP1
DROP TABLE #TEMP1
SET @offset = @offset + 1
END
答案 0 :(得分:1)
在SQL Server 2008中,您可以在存储过程的循环中删除并重新创建表:
create procedure CreateTablesInALoop
as
declare @i int
set @i = 0
while @i < 100
begin
select 1 as id into #t
drop table #t
set @i = @i + 1
print 'Yay'
end
go
exec CreateTablesInALoop
go
答案 1 :(得分:1)
你需要对临时表做什么?
一种选择是使用表变量,而不是临时表。
或者您可以尝试使用Common Table Expressions这样:
WHILE @offset<@NumDays
BEGIN
WITH tmp1 AS (SELECT
bg.*, j.ID, j.time, j.Status
FROM #TEMP2 AS bg
left outer join PersonSchedule j on bg.PersonID = j.PersonID and
bg.TimeSlotDateTime = j.TimeSlotDateTime and
j.TimeSlotDateTime = @StartDate + @offset
)
SELECT * FROM tmp1
SET @offset = @offset + 1
END