何时删除SQL SERVER中的#temp表?

时间:2015-05-30 02:13:21

标签: sql-server

我有一张桌子"#tblResourceC7"像这样:

Id          Class                Code                 Value
----------- -------------------- -------------------- -----------
1           F1                   A                    100
2           F1                   B                    100
3           F2                   C                    220
4           F3                   A                    150
5           F2                   C                    300
6           F3                   D                    120

然后我创建一个新表"#tblResource9"通过运行此查询,

SELECT *
INTO #tblResource9
FROM
(
    SELECT Class, [A], [B], [C], [D] FROM
    (SELECT Class, Code, SUM(Value) AS SUM_VALUE 
        FROM #tblResourceC7 GROUP BY Class, Code) AS TBL7
    PIVOT
    (
        MAX(SUM_VALUE)
        FOR Code IN ([A], [B], [C], [D])
    ) AS PIVOTTABLE
)
AS KQ9

我得到的结果是" SELECT * FROM#tblResource9":

Class                A           B           C           D
-------------------- ----------- ----------- ----------- -----------
F1                   100         100         NULL        NULL
F2                   NULL        NULL        520         NULL
F3                   150         NULL        NULL        120

但是,当我将这些代码带到这样的查询字符串时:

DECLARE @QUERY91 nvarchar(MAX);

SET @QUERY91 = 'SELECT *
                INTO #tblResource9
                FROM
                (
                    SELECT Class, [A], [B], [C], [D] FROM
                    (SELECT Class, Code, SUM(Value) AS SUM_VALUE 
                       FROM #tblResourceC7 GROUP BY Class, Code) AS TBL7
                    PIVOT
                    (
                        MAX(SUM_VALUE)
                        FOR Code IN ([A], [B], [C], [D])
                    ) AS PIVOTTABLE
                )
                AS KQ9
                ';

EXEC (@QUERY91)

一切正常(3行受影响)。 但为什么我没有表#34;#tblResource9"当我" SELECT * FROM#tblResource9" (无效的对象名称'#tblResource9')。

1 个答案:

答案 0 :(得分:1)

会话结束时将删除临时表,除非它是在存储过程中创建的,否则在退出过程时它将被删除。

Create table in books online

  

删除在存储过程中创建的本地临时表   存储过程完成后自动执行。表可以   由存储的任何嵌套存储过程引用   创建表的过程。该表不能被引用   调用创建表的存储过程的过程。

     

最后会自动删除所有其他本地临时表   当前会议。

     

会话时会自动删除全局临时表   创建表结束,所有其他任务已停止   引用它们。任务和表之间的关联是   仅在单个Transact-SQL语句的生命周期内维护。这个   表示在完成时删除全局临时表   最后一个主动引用的Transact-SQL语句   创建会话结束时的表格。