SQL Server 临时表17 Mar 2025 | 6 分钟阅读 SQL Server 中的临时(temp)表是一种特殊的表,它不能永久存储在数据库服务器上。这个表会保存一个常规表的数据子集,并且可以在一个特定的会话中重复使用。我们不能将此表存储在内存中。由于此表临时存在于当前的数据库服务器上,因此当当前会话结束或用户终止数据库连接时,它会自动删除。我们可以在系统数据库“tempdb”中找到临时表。 当一个表中有很多记录,而我们只需要经常处理其中一小部分记录时,临时表非常方便。在这种情况下,我们可以只过滤一次数据并将其保存在临时表中,而不是多次过滤数据来获取所需数据。之后,我们就可以在该临时表上运行查询。因此,临时表具有一项功能,可以帮助我们快速完成复杂的任务。 在 SQL Server 中创建临时表我们可以通过两种方式创建临时表
让我们首先创建一个表来演示两种方式的临时表。以下语句在示例数据库中创建了一个名为'Student'的表 我们可以使用 SELECT 语句来验证该表。它将显示如下表 ![]() 使用 SELECT INTO 语句创建的临时表SELECT INTO 语句是在 SQL Server 中创建临时表的最简单方法。我们通常使用此方法来保存中间结果,以便在同一会话中重复使用。 以下语法演示了如何使用 SELECT INTO 语句创建临时表 临时表的名称始终以哈希符号(#)开头。哈希符号告诉 SQL Server 正在处理临时表。例如,下面的查询使用 SELECT INTO 语句在 tempdb 数据库中创建了一个临时表。我们只能在创建临时表的会话中使用此表。 正如我们在上面的语句中看到的,它使用 SELECT 语句创建了一个名为"#MaleStudents"的临时表,其中包含三个列(name, age, 和 gender)。它从包含所有男性学生记录的姓名、年龄和性别的'Student'表中填充了数据。我们不应忘记临时表名在其名称的开头必须有一个哈希(#)符号。 执行语句后,我们可以通过以下路径访问 SQL Server Management Studio 来查看临时表的位置:对象资源管理器 -> 数据库 -> 系统数据库 -> tempdb -> 临时表。在这里,我们得到临时表的名称以及哈希符号。请看下图 ![]() 正如我们在图像中看到的,临时表名称的末尾还有一个序列号。它表示 SQL Server 为每个临时表创建的唯一标识符,用于区分临时表。创建此项是因为多个数据库连接可能具有多个临时表的相同名称。 现在,我们可以在创建它的连接中对临时表执行 SQL 操作。例如,如果我们想获取所有男性学生的详细信息,则可以执行以下查询 此语句将获取以下记录 ![]() 使用 CREATE TABLE 语句创建的临时表CREATE TABLE 语句是创建临时表的第二种方法。下面的语句将创建一个名为 #FemaleStudents 的临时表。如果我们想创建一个相同的表(例如 #MaleStudents),则需要将当前数据库更改为新连接。 以下是使用 CREATE TABLE 语句创建临时表的查询 正如我们在语句中看到的,它与创建普通表类似。唯一的区别是临时表的名称以哈希(#)符号开头。 接下来,我们将像添加普通表一样向此表中添加记录 现在,我们可以在当前会话中按如下方式查询数据 ![]() 如果我们尝试在另一个连接中查询上述表,SQL Server 将抛出以下错误消息 ![]() SQL Server 抛出此错误是因为临时表只能在生成它们的会话中访问。 临时表的类型SQL Server 将临时表分为两种类型
本地临时表本地临时表存储在 tempdb 中,并且仅对创建它们的会话可见。当我们在 SQL Server 实例中关闭连接时,这些表会自动销毁。我们可以使用哈希(#)符号作为前缀来定义本地临时表的名称。可以在多个连接中以相同的名称创建临时表。 我们可以使用以下语法在 SQL Server 中创建本地临时表: 我们已经在上面的临时表示例中看到了这些,它们也解释了本地临时表。 全局临时表全局临时表存储在 tempdb 中,并且对所有用户和所有会话都可见。当引用该表的所有用户断开连接或使用该表的最后一个会话完成后,这些表会自动销毁。我们可以使用双哈希(##)符号作为前缀来定义全局临时表的名称。 我们可以使用以下语法在 SQL Server 中创建全局临时表: 示例以下示例解释了全局临时表的创建。在这里,我们创建了一个名为"##FemaleStudents"的临时表,它存储在 tempdb 系统数据库中。 我们可以按如下方式查询此表 ![]() 如何删除临时表?SQL Server 允许我们通过两种方式删除临时表
自动删除当我们关闭创建临时表的连接时,SQL Server 会自动删除该临时表。SQL Server 会在关闭创建它们的连接时删除全局临时表,并且其他连接中引用该表的查询已完成。 手动删除我们可以使用DROP TABLE语句手动从创建临时表的连接中删除临时表。语法如下 如果我们要删除多个临时表,则需要提供逗号分隔的表名。请参阅以下语法 临时表与常规表以下比较图解释了临时表和常规表之间的主要区别
下一个主题SQL Server 中的存储过程 |
我们请求您订阅我们的新闻通讯以获取最新更新。