如何在SQL服务器插入到临时表

377 阅读3分钟

临时表,或称temp表,是指由SQL Server用户创建的表,其唯一目的是临时存储数据。临时表对于处理那些需要大量指定查询才能过滤的数据子集非常有用。

本指南将讨论如何在SQL Server中使用临时表。我们将从基础开始,学习如何创建临时表,使用全局临时表,向临时表插入数据,以及删除临时表。

SQL Server 创建临时表

在SQL Server中,有两种创建临时表的主要方法:

  1. 使用SQL SELECT语句。
  2. 使用CREATE TABLE语句。

让我们来看看上面的每一种方法。

使用SQL选择语句

你可以使用SELECT INTO语句来创建一个临时表,并从一个定义的查询中插入数据。

用选择语句创建临时表的语法如图所示。

SELECT column_list INTO #temporary_table_name FROM TABLE_NAME WHERE conditional_expression;

我们使用select语句,后面是临时表的名称。在SQL Server中,临时表的名称以#号开始。

请看下面的例子,它使用现有表的各种列创建一个临时表。

USE salesdb;
SELECT *  INTO #sales_temp FROM Sales WHERE Quantity > 5;

上面的查询应该选择匹配的记录,并将它们插入到指定的临时表中。

SQL Server在tempdb数据库中存储临时表。这是一个由SQL Server自动创建的系统数据库。

在SQL Server Management Studio中,你可以通过导航来查看上面创建的临时表。数据库 -> 系统数据库 -> tempdb -> 临时表

每个临时表都包含一个后缀的唯一标识符,包括一连串的数值。这是因为多个连接可以创建具有类似名称的临时表。SQL Server在名称的末尾附加了一个唯一的数值,以避免冲突。

使用 "创建表 "查询

我们可以使用的第二种方法是SQL CREATE TABLE语句来创建一个临时表。这种方法与普通表的方法没有很大区别。但是,表名以磅#号开始。

比如说

CREATE TABLE #my_temp_table (
        id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
        name VARCHAR(50)
);

上面的查询将创建一个具有指定名称的临时表。

一旦我们创建了临时表,我们就可以像普通表一样插入数据,如下面的查询所示。

USE tempdb;
INSERT INTO #my_temp_table(name)
VALUES ('MySQL'),
           ('PostgreSQL'),
           ('MongoDB'),
           ('SQLite');

如果你需要获得存储在临时数据库中的记录,你可以使用选择语句,如图所示。

SELECT * FROM #my_temp_table;

输出示例如图所示。

SQL Server 删除临时表

一旦你创建了一个临时表,你可能会想在使用后删除它。在SQL Server中,有两种方法可以删除一个临时表。

终止连接

当创建临时表的连接结束时,SQL Server将自动删除所有临时表。

如前所述,一个临时表只在创建它的连接中可用。因此,一旦连接被关闭,SQL服务器就会删除这些表,为其他连接释放资源。

删除语句

你可以使用的第二个删除临时表的方法是SQL DROP查询。例如,要删除前面查询中创建的my_temp_table。

DROP TABLE #my_temp_table;

全局临时表

一个临时表只对默认创建的连接可用。然而,你可以创建一个在服务器上所有连接都可用的表。这些表被称为全局临时表。

要在SQL Server中创建一个全局临时表,请使用双磅符号(##)。

例如:

CREATE TABLE ##my_temp_table (
        id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
        name VARCHAR(50)
);
USE tempdb;
INSERT INTO ##my_temp_table(name)
VALUES ('MySQL'),
           ('PostgreSQL'),
           ('MongoDB'),
           ('SQLite');

与单个会话表不同,SQL服务器在创建的连接关闭后会丢弃全局临时表,而所有其他连接也会关闭。

在关闭

在这篇文章中,你了解了如何在SQL Server中使用临时表。如果有效地使用临时表,可以带来好处。