期MSSQL临时表的生存期及其管理

1. 什么是临时表

临时表是一种特殊的表,可以被应用于存储临时的数据和结果集。相比于普通表,临时表只存在于当前会话或者当前执行环境中,当会话或者执行环境结束后,临时表中的数据也会被自动删除。

临时表分为局部临时表全局临时表两种类型。局部临时表只能在创建它的会话中使用,而全局临时表可以被所有会话共享。

-- 创建局部临时表

CREATE TABLE #tmp_table (id INT, name VARCHAR(20));

-- 创建全局临时表

CREATE TABLE ##tmp_table (id INT, name VARCHAR(20));

2. 临时表的生存期

2.1 局部临时表的生存期

局部临时表的生存期只存在于创建它的会话中。当会话结束时,局部临时表和其中的数据会被自动删除。

可以通过IF OBJECT_ID('tempdb..#tmp_table') IS NOT NULL DROP TABLE #tmp_table手动删除局部临时表,但是如果会话结束后,会自动删除局部临时表和其中的数据,所以无需手动删除。

2.2 全局临时表的生存期

全局临时表的生存期在所有使用该表的会话都结束后,系统会自动删除该表。可以理解为,全局临时表的生存期是在创建它的那个会话结束后开始计算的。

需要注意的是,如果有其他的会话正在使用全局临时表,那么当前会话结束后,全局临时表不会自动删除。

-- 在会话 A 中创建全局临时表

CREATE TABLE ##tmp_table (id INT, name VARCHAR(20));

-- 在会话 B 中使用全局临时表

SELECT * FROM ##tmp_table;

-- 会话 A 结束后,如果没有其他会话使用 ##tmp_table

-- 系统会自动删除该表

3. 如何管理临时表

临时表会在当前会话或者执行环境结束后被自动删除,所以无需手动删除。但是如果需要在使用完临时表后手动删除它,可以使用DROP TABLE语句。

-- 删除局部临时表

IF OBJECT_ID('tempdb..#tmp_table') IS NOT NULL DROP TABLE #tmp_table;

-- 删除全局临时表

IF OBJECT_ID('tempdb..##tmp_table') IS NOT NULL DROP TABLE ##tmp_table;

数据库标签