这个答案让我有些困惑。什么是“选择临时表”,有人可以给我看一个简单的例子吗?
5 回答
临时表是仅在存储过程期间存在的表,通常用于在进行最终计算的过程中保存临时结果。
在 SQL Server 中,所有临时表都以 # 为前缀,因此如果您发出类似的语句
Create table #tmp(id int, columnA)
然后 SQL Server 将自动知道该表是临时的,并且当存储过程超出范围时它将被销毁,除非该表被显式删除,例如
drop table #tmp
我通常在针对具有高事务量的大型表运行的存储过程中使用它们,因为我可以将我需要的数据子集作为临时副本插入到临时表中并处理数据,而不必担心导致生产系统崩溃如果我正在处理的数据是一项相当激烈的操作。
在 SQL Server 中,所有临时表都存在于 tempdb 数据集中。
有关更多信息,请参阅本文。
如果您想要一次又一次地使用一组复杂的结果,那么您是继续查询主表(其中数据将发生变化,并可能影响性能)还是将它们存储在临时表中以进行更多处理. 最好经常使用临时表。
或者您确实需要以非设置方式遍历行,您可以使用临时表(或 CURSOR)
如果您对数据库执行简单的 CRUD,那么您可能不需要临时表
你有:
- 表变量:
DECLARE @foo TABLE (bar int...)
- 显式临时表:
CREATE TABLE #foo (bar int...)
- 内联创建:
SELECT ... INTO #foo FROM...
您可以使用它SELECT ... INTO
来创建一个临时表并像这样填充它:
SELECT Col1, Col2...
INTO #Table
FROM ...
WHERE ...
(顺便说一句,此语法适用于 SQL Server 和 Sybase。)
编辑一旦你像我上面那样创建了表,你就可以在同一个连接上使用它的其他查询:
Select
From OtherTable
Join #Table
On #Table.Col = OtherTable.Col
这里的关键是这一切都发生在同一个连接上。因此,从客户端脚本创建和使用临时表会很尴尬,因为您必须确保该表的所有后续使用都在同一个连接上。相反,大多数人在存储过程中使用临时表,他们在其中一行创建表,然后在同一过程中稍后使用几行。
将临时表视为“表”类型的 sql 变量。在脚本和存储过程中使用它们。当您需要处理不是简单值而是数据库表子集(垂直和水平)的数据时,它会派上用场。
当您意识到这些好处时,您可以利用临时表的各种共享模型(范围)带来的更多功能:私有、全局、事务等。所有主要的 RDBMS 引擎都支持临时表,但没有标准的特性或语法他们。
例如用法见答案。
临时表是使用一些这样的语法动态创建的表:
SELECT [columns] INTO #MyTable FROM SomeExistingTable
然后,您拥有的是一个表格,其中填充了您在其中选择的值。现在你可以选择它,更新它,无论如何。
SELECT FirstName FROM #MyTable WHERE...
该表在某个预定的时间范围内存在,例如,在它存在的存储过程的持续时间内。然后它就从内存中消失了,再也无法访问了。暂时的。
高温高压