在存储过程中,何时在SQL Server 2005中创建#Temptable?在创建查询执行计划时还是在执行存储过程时?
if (@x = 1)
begin
select 1 as Text into #Temptable
end
else
begin
select 2 as Text into #Temptable
end
答案 0 :(得分:2)
在会话结束时创建它并在会话结束时删除。
答案 1 :(得分:1)
有趣的问题。
对于您正在创建的临时表的类型,我认为这是执行存储过程的时间。使用#前缀创建的表可供其创建的SQL Server会话访问。会话结束后,它们将被删除。
此网址:http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx似乎表示在创建查询执行计划时未创建临时表。
答案 2 :(得分:1)
虽然它可能会在会话结束时自动删除,但最好在完成后自行删除表。
答案 3 :(得分:1)
您可能还需要考虑表变量,其生命周期完全由您管理。
DECLARE @MyTable TABLE (MyPK INT IDENTITY, MyName VARCHAR(100))
INSERT INTO @MyTable ( MyName ) VALUES ( 'Icarus' )
INSERT INTO @MyTable ( MyName ) VALUES ( 'Daedalus' )
SELECT * FROM @MyTable
我几乎总是使用这种方法,但它确实有缺点。最值得注意的是,您只能使用可以在TABLE()结构中声明的索引,这实际上意味着您仅限于主键 - 不使用ALTER TABLE。