我有一张桌子"#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')。
答案 0 :(得分:1)
会话结束时将删除临时表,除非它是在存储过程中创建的,否则在退出过程时它将被删除。
删除在存储过程中创建的本地临时表 存储过程完成后自动执行。表可以 由存储的任何嵌套存储过程引用 创建表的过程。该表不能被引用 调用创建表的存储过程的过程。
最后会自动删除所有其他本地临时表 当前会议。
会话时会自动删除全局临时表 创建表结束,所有其他任务已停止 引用它们。任务和表之间的关联是 仅在单个Transact-SQL语句的生命周期内维护。这个 表示在完成时删除全局临时表 最后一个主动引用的Transact-SQL语句 创建会话结束时的表格。