Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql “选择临时表”是什么意思?_Sql_Temp Tables - Fatal编程技术网

Sql “选择临时表”是什么意思?

Sql “选择临时表”是什么意思?,sql,temp-tables,Sql,Temp Tables,让我有点困惑。什么是“选择临时表”,有人能给我举个简单的例子吗?你可以使用选择。。。要创建临时表并按如下方式填充它,请执行以下操作: SELECT Col1, Col2... INTO #Table FROM ... WHERE ... 顺便说一句,此语法适用于SQL Server和Sybase 编辑创建表后,如上文所述,您可以在同一连接上使用该表进行其他查询: Select From OtherTable Join #Table On #Table.Col = Ot

让我有点困惑。什么是“选择临时表”,有人能给我举个简单的例子吗?

你可以使用选择。。。要创建临时表并按如下方式填充它,请执行以下操作:

SELECT Col1, Col2... 
INTO #Table
FROM ...
WHERE ...
顺便说一句,此语法适用于SQL Server和Sybase

编辑创建表后,如上文所述,您可以在同一连接上使用该表进行其他查询:

Select
From OtherTable
    Join #Table
        On #Table.Col = OtherTable.Col

这里的关键是,这一切都发生在同一个连接上。因此,从客户机脚本创建和使用临时表会很尴尬,因为您必须确保该表的所有后续使用都在同一个连接上。相反,大多数人在存储过程中使用临时表,他们在一行上创建表,然后在同一过程中使用几行。

将临时表视为“table”类型的sql变量。在脚本和存储过程中使用它们。当您需要处理的数据不是简单的值,而是数据库表的一个子集(包括垂直和水平)时,它非常方便

当您意识到这些好处时,您就可以利用各种共享模型提供的更多功能,这些模型适用于临时表:私有、全局、事务等。所有主要的RDBMS引擎都支持临时表,但没有用于临时表的标准功能或语法


例如,用法请参见。

临时表是使用以下语法动态创建的表:

SELECT [columns] INTO #MyTable FROM SomeExistingTable
然后,您将得到一个表,其中填充了您在其中选择的值。现在你可以根据它来选择,更新它,无论什么

SELECT FirstName FROM #MyTable WHERE...
该表在某个预定的时间范围内存在,例如,在其所在的存储过程的持续时间内。然后它从记忆中消失,再也无法访问。暂时的


HTH

临时表是仅在存储过程期间存在的表,通常用于在进行最终计算时保存临时结果

在SQL Server中,如果发出以下语句,则所有临时表都会以so作为前缀

Create table #tmp(id int, columnA)
然后SQL Server将自动知道该表是临时的,并且当存储过程超出范围时,该表将被销毁,除非该表像下面那样被显式删除

drop table #tmp
我通常在针对具有高事务量的大型表运行的存储过程中使用它们,因为我可以将所需的数据子集作为临时副本插入临时表,并处理数据,而不必担心在处理数据时会导致生产系统崩溃(如果处理数据的操作相当激烈)

在SQL Server中,所有临时表都位于tempdb数据集中


有关更多信息,请参阅。

如果您有一组复杂的结果需要反复使用,那么您是继续查询数据将发生更改并可能影响性能的主表,还是将其存储在临时表中以进行更多处理。最好经常使用临时桌子

或者您确实需要以非设置的方式遍历行,您可以使用临时表或游标

如果对DB执行简单的CRUD,则可能不需要临时表

你有:

表变量:声明@foo table bar int。。。 explict temp表格:创建表格foo bar int。。。 内联创建:选择。。。从。。。
我还是不明白它是怎么用的。