快速概述:SQL Server 2005 中的临时表






4.84/5 (96投票s)
SQL Server 2005 中临时表的简要概述。
目录
引言
SQL Server 提供了临时表的概念,这在很大程度上帮助了开发人员。这些表可以在运行时创建,并且可以执行普通表可以执行的所有类型的操作。但是,根据表类型,其作用域是有限的。这些表创建在 tempdb
数据库中。
在本文中,我将为初学者快速概述这些临时表。请提供宝贵的建议和反馈以改进本文。
临时表的不同类型
SQL Server 根据表行为和作用域提供了两种类型的临时表。它们是
- 本地临时表
- 全局临时表
本地临时表
本地临时表仅供当前连接的用户使用;当用户断开与实例的连接时,它们会自动删除。本地临时表名以哈希符号 ("#"
) 开头。全局临时表
全局临时表的名称以双哈希 ("##"
) 开头。一旦某个连接创建了该表,它就像永久表一样,任何连接的任何用户都可以访问它。只有在所有连接都关闭后才能删除它。
在 SQL Server 2005 中创建临时表
正如我之前讨论过的,有两种类型的临时表可用。这里我将描述其中的每一种。
本地临时表
下面给出的语法用于在 SQL Server 2005 中创建本地临时表
CREATE TABLE #LocalTempTable(
UserID int,
UserName varchar(50),
UserAddress varchar(150))
上面的脚本将在 tempdb
数据库中创建一个临时表。我们可以像处理普通表一样在临时表中 insert
或 delete
记录,例如
insert into #LocalTempTable values ( 1, 'Abhijit','India');
现在从该表中 select
记录
select * from #LocalTempTable
执行所有这些语句后,如果关闭查询窗口并再次执行 "Insert"
或 "Select"
命令,它将抛出以下错误
Msg 208, Level 16, State 0, Line 1
Invalid object name '#LocalTempTable'.
这是因为本地临时表的作用域仅限于当前用户的当前连接。
全局临时表
全局临时表的作用域对于特定连接的所有用户都相同。我们需要在全局临时表的名称前加上 "##"
。下面是创建全局临时表的语法:
CREATE TABLE ##NewGlobalTempTable(
UserID int,
UserName varchar(50),
UserAddress varchar(150))
上面的脚本将在tempdb 数据库中创建一个临时表。我们可以像处理普通表一样在临时表中 insert
或 delete
记录,例如
insert into ##NewGlobalTempTable values ( 1, 'Abhijit','India');
现在从该表中选择记录
select * from ##NewGlobalTempTable
全局临时表对所有 SQL Server 连接都可见。创建其中一个后,所有用户都可以看到它。
临时表的存储位置
临时表存储在 tempdb
的临时文件夹中。每当我们创建临时表时,它都会进入 tempdb
数据库的临时文件夹。

现在,如果我们深入查看本地临时表的名称,每个表名都会与一个 ID 关联一个 '-
'。看下面的图片

SQL Server 会自动处理所有这些,我们无需担心,只需使用表名即可。
何时使用临时表?
以下是可以使用临时表的场景
- 当我们在存储过程中进行大量行操作时。
- 这对于替换游标很有用。我们可以将结果集数据存储到临时表中,然后从那里操作数据。
- 当我们有一个复杂的
join
操作时。
使用临时表之前需要注意的事项
- 临时表创建在 SQL Server 的
tempdb
上。这是一个单独的数据库。因此,这会增加额外的开销,并可能导致性能问题。 - 行数和列数应尽可能少。
- 完成工作后应删除表。
替代方法:表变量
临时表的替代方法是表变量,它可以执行我们在 Temp
表中可以执行的所有类型的操作。下面是使用表变量的语法。
Declare @TempTableVariable TABLE(
UserID int,
UserName varchar(50),
UserAddress varchar(150))
下面的脚本用于 insert
和读取 Tablevariable
的记录
insert into @TempTableVariable values ( 1, 'Abhijit','India');
现在从该 tablevariable
中选择记录
select * from @TempTableVariable
何时使用表变量而不是临时表
Tablevariable
始终适用于少量数据。如果结果集返回大量记录,我们需要选择临时表。
参考和进一步研究
历史
- 2009 年 9 月 23 日:首次发布