何时在SQL Server 2005中使用临时表

时间:2010-11-07 07:22:05

标签: sql-server-2005

我读到了临时表,全局临时表和表变量。我理解它,但无法想象我必须使用它的情况。请详细说明我应该何时使用临时表。

2 个答案:

答案 0 :(得分:16)

使用临时表的最常见方案是在存储过程中。

如果存储过程中存在涉及操作无法在单个查询中完成的数据的逻辑,则在这种情况下,一个查询/中间结果的输出可以存储在临时表中,然后进一步参与通过连接等操作来实现最终结果。

使用临时表的一个常见情况是存储SELECT INTO语句的结果

表变量相对较新(在SQL Server 2005中引入 - 据我所知)可以代替大多数情况下的临时表使用。讨论了两者之间的一些差异here

在很多情况下,特别是在OLTP应用程序中,在程序中使用临时表意味着 MAY 可能在您的数据库中具有业务处理逻辑,并且可能需要考虑看看你的设计 - 特别是在n层系统的应用程序中有一个单独的业务层的情况下。

答案 1 :(得分:11)

三者之间的主要区别在于寿命和范围。

通过全局表格,我假设你的意思是标准,磨机,表格。表用于存储持久数据。所有登录用户都可以访问它们。您所做的任何更改都对其他用户可见,反之亦然。

临时表仅用于在会话中存储数据。使用临时表的最佳时间是在SQL服务器中存储信息以便在多个SQL事务中使用时。像普通的表一样,你将创建它,与它交互(插入/更新/删除),当你完成后,你将丢弃它。表和临时表之间存在两个差异。

  1. 只有您可以看到临时表。即使其他人创建了一个具有相同名称的临时表,也没有其他人能够看到或影响您的临时表。
  2. 只要您已登录,临时表就存在,除非您明确删除它。如果您注销或断开连接,SQL Server将自动为您清理它。这也意味着数据不是持久的。如果您在一个会话中创建临时表并注销,则在您重新登录时它将不存在。
  3. 表变量的作用类似于SQL Server中的任何变量。这用于存储在单个事务中使用的数据。这是TSQL的一个相对较新的功能,通常用于在过程之间传递数据 - 比如传递数组。表和表变量之间存在三种差异。

    1. 就像临时表一样,它只对您可见。
    2. 因为它是一个变量,所以它可以在存储过程之间传递。
    3. 临时表仅存在于当前事务中。一旦SQL Server完成事务(使用GO或END TRANSACTION语句)或它超出范围,它将被取消分配。
    4. 出于某些原因,我个人避免使用临时表和表变量。首先,它们的语法是Microsoft特定的。如果您的程序要与多个RDBMS交互,请不要使用它们。此外,临时表和表变量倾向于增加某些SQL查询的复杂性。如果您的代码可以使用更简单的方法完成,我建议您使用简单的方法。