【问题标题】:SQL Server 2005 Temporary TablesSQL Server 2005 临时表
【发布时间】:2010-09-07 19:38:33
【问题描述】:

在存储过程中,#Temptable 是什么时候在 SQL Server 2005 中创建的?是在创建查询执行计划时还是在执行存储过程时?

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

【问题讨论】:

    标签: sql-server sql-server-2005 temp-tables


    【解决方案1】:

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

    【讨论】:

      【解决方案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。

      【讨论】:

        【解决方案3】:

        有趣的问题。

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-09-12
            • 2012-01-09
            • 1970-01-01
            • 1970-01-01
            • 2011-02-14
            • 2011-09-06
            • 1970-01-01
            相关资源
            最近更新 更多