1

在存储过程中,SQL Server 2005 中的#Temptable 何时创建?创建查询执行计划或执行存储过程时?

if (@x = 1)
    begin
        select 1 as Text into #Temptable
    end
else
    begin
        select 2 as Text into #Temptable
    end
4

4 回答 4

2

它在执行时创建,在会话结束时删除。

于 2008-09-04T14:44:06.660 回答
2

您可能还需要考虑表变量,它的生命周期完全为您管理。

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。

于 2008-09-16T21:21:59.847 回答
1

有趣的问题。

对于您正在创建的临时表的类型,我认为是执行存储过程的时间。使用 # 前缀创建的表可供创建它们的 SQL Server 会话访问。会话结束后,它们将被删除。

此网址:http ://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx似乎表明创建查询执行计划时未创建临时表。

于 2008-09-04T14:51:41.557 回答
1

虽然它可能会在会话结束时自动删除,但最好在完成后自己删除表。

于 2008-09-04T22:12:29.860 回答