MSSQL中如何创建临时表

什么是临时表

在MSSQL中,临时表是一类特殊的表。它们仅在当前会话或批处理中存在,并且在结束时自动删除。临时表通常用于存储计算的中间结果。它们可以是本地临时表(在tempdb数据库中创建)或全局临时表(在tempdb的所有连接中创建)。

创建本地临时表

要创建本地临时表,可以使用CREATE TABLE语句,但表名称必须以“#”开头。以下是创建本地临时表的示例:

CREATE TABLE #myTempTable (

ID INT,

Name VARCHAR(50),

Address VARCHAR(100)

)

此语句会在tempdb数据库中创建名为“#myTempTable”的表。然后,可以像任何其他表一样使用它:

INSERT INTO #myTempTable (ID, Name, Address)

VALUES (1, 'John', '123 Main St')

一旦当前会话结束,#myTempTable表就会被删除。

创建全局临时表

要创建全局临时表,表名称必须以“##”开头。以下是创建全局临时表的示例:

CREATE TABLE ##myTempTable (

ID INT,

Name VARCHAR(50),

Address VARCHAR(100)

)

此语句会在tempdb数据库中创建名为“##myTempTable”的表。如果另一个连接尝试使用相同的表名称,它将使用现有的表,而不会创建新的表。全局临时表只能通过两种方式之一删除:

关闭创建它的连接

当连接关闭时,所有全局临时表都会自动删除。由于这些表不是由用户创建的,因此不能手动删除它们。

手动删除它们

要手动删除全局临时表,请使用DROP TABLE语句,并在表名前加上“##”前缀。以下是删除全局临时表的示例:

DROP TABLE ##myTempTable

临时表的使用

临时表通常用于存储中间结果。例如,可以使用临时表来计算某个查询的结果,然后将结果显示给用户。以下是一个示例查询,该查询使用临时表来计算中间结果:

CREATE TABLE #TempTable (

CustomerID INT,

OrderCount INT,

LastOrderDate DATETIME

)

INSERT INTO #TempTable (CustomerID, OrderCount, LastOrderDate)

SELECT

CustomerID,

COUNT(*) AS OrderCount,

MAX(OrderDate) AS LastOrderDate

FROM Orders

GROUP BY CustomerID

SELECT

c.CustomerID,

c.CustomerName,

t.OrderCount,

t.LastOrderDate

FROM Customers c

INNER JOIN #TempTable t ON c.CustomerID = t.CustomerID

ORDER BY t.OrderCount DESC

此查询将所有订单按客户分组,并使用临时表#TempTable计算每个客户的订单数和最后一次订单日期。然后它将客户详细信息与临时表一起使用,以显示按订单数排序的客户列表。

总结

临时表是一种非常有用的工具,可用于存储计算的中间结果。在MSSQL中,它们可以是本地临时表或全局临时表,具有这种表的自动清理功能,使得它们特别适合处理中间结果。

数据库标签