我读到了临时表,全局临时表和表变量。我理解它,但无法想象我必须使用它的情况。请详细说明我应该何时使用临时表。
答案 0 :(得分:16)
使用临时表的最常见方案是在存储过程中。
如果存储过程中存在涉及操作无法在单个查询中完成的数据的逻辑,则在这种情况下,一个查询/中间结果的输出可以存储在临时表中,然后进一步参与通过连接等操作来实现最终结果。
使用临时表的一个常见情况是存储SELECT INTO语句的结果
表变量相对较新(在SQL Server 2005中引入 - 据我所知)可以代替大多数情况下的临时表使用。讨论了两者之间的一些差异here
在很多情况下,特别是在OLTP应用程序中,在程序中使用临时表意味着 MAY 可能在您的数据库中具有业务处理逻辑,并且可能需要考虑看看你的设计 - 特别是在n层系统的应用程序中有一个单独的业务层的情况下。
答案 1 :(得分:11)
三者之间的主要区别在于寿命和范围。
通过全局表格,我假设你的意思是标准,磨机,表格。表用于存储持久数据。所有登录用户都可以访问它们。您所做的任何更改都对其他用户可见,反之亦然。
临时表仅用于在会话中存储数据。使用临时表的最佳时间是在SQL服务器中存储信息以便在多个SQL事务中使用时。像普通的表一样,你将创建它,与它交互(插入/更新/删除),当你完成后,你将丢弃它。表和临时表之间存在两个差异。
表变量的作用类似于SQL Server中的任何变量。这用于存储在单个事务中使用的数据。这是TSQL的一个相对较新的功能,通常用于在过程之间传递数据 - 比如传递数组。表和表变量之间存在三种差异。
出于某些原因,我个人避免使用临时表和表变量。首先,它们的语法是Microsoft特定的。如果您的程序要与多个RDBMS交互,请不要使用它们。此外,临时表和表变量倾向于增加某些SQL查询的复杂性。如果您的代码可以使用更简单的方法完成,我建议您使用简单的方法。