2010-11-07 72 views

回答

12

使用临时表最常见的情况是来自存储过程。

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

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

表变量是相对较新的(在SQL Server 2005中引入的 - 只要我还记得)可以代替使用临时表中最例。两者之间的一些分歧进行了讨论here

在很多情况下,尤其是在OLTP应用程序,你的程序内的临时表的使用意味着你MAY可能有业务处理逻辑数据库和可能是一个考虑因素您可以重新审视您的设计 - 特别是在n层系统的应用程序中具有单独的业务层的情况下。

9

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

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

临时表仅用于在会话中存储数据。使用临时表的最佳时机是当您需要在SQL服务器中存储信息以用于多个SQL事务时。与普通表一样,您将创建它并与之交互(插入/更新/删除),当完成时,您将放弃它。表和临时表之间有两点区别。

  1. 临时表只对您可见。即使其他人创建了一个具有相同名称的临时表,其他人也无法看到或影响临时表。
  2. 只要您登录,临时表就存在,除非您明确地删除它。如果您注销或断开连接,SQL Server将自动为您清理它。这也意味着数据不是持久的。如果您在一个会话中创建临时表并注销,则在您重新登录时它不会存在。

表变量的工作方式与SQL Server中的任何变量一样。这用于存储用于单个事务的数据。这是TSQL的一个相对较新的功能,通常用于在过程之间传递数据 - 例如传递数组。表格和表格变量之间有三点区别。

  1. 像临时表一样,它只对您可见。
  2. 因为它是一个变量,所以它可以在存储过程之间传递。
  3. 临时表只存在于当前事务中。一旦SQL Server完成一个事务(使用GO或END TRANSACTION语句)或超出范围,它将被释放。

我个人避免使用临时表和表变量,原因有几个。首先,它们的语法是Microsoft特定的。如果您的程序要与多个RDBMS进行交互,请不要使用它们。此外,临时表和表变量有增加某些SQL查询复杂性的倾向。如果你的代码可以使用更简单的方法完成,我建议使用简单的方法。