SQL 2008中的TEMPORARY TABLE和TABLE VARIABLE有什么区别?

aba*_*hev 9 sql t-sql sql-server temp-tables sql-server-2008

有什么区别:

CREATE TABLE #temp ( [ID] INT)

INSERT INTO #temp
SELECT ...
Run Code Online (Sandbox Code Playgroud)

DECLARE @temp TABLE ( [ID] INT)

INSERT @temp
SELECT ...
Run Code Online (Sandbox Code Playgroud)

在SQL Server 2008中?

Cha*_*ana 12

临时表就像大多数特性中的普通表一样,除了它们进入TempDB而不是当前的数据库,并且它们在有限的范围之后消失(取决于它们是基于会话还是全局临时表.但是对Temp表中的数据的所有更改都是记录到事务日志中,具有所需的所有性能影响.otoh,您还可以像对普通表一样,向临时表中添加任意数量的索引或视图,触发器或其他任何内容.

表变量是一种快捷的内存表(它们也使用临时数据库).不记录对它们的更改(这可以提高性能).但是你只能获得一个索引,(因为在初始声明语句之后无法创建索引,你可以在表变量上创建的唯一索引是可以包含在初始表变量声明中的索引...

   Declare @Tab Table (myKey integer Primary Key Not Null, data varchar(20)) 
Run Code Online (Sandbox Code Playgroud)

由于这些特性,临时表是大表(宽和多行)和/或在其生命周期中将经历多个访问模式的更好选择,而表变量最适合您需要非常窄的表(仅键表,或只有一个数据列的键),它将始终被该索引键访问...

  • @erikkallen,不知道; 请参考? (2认同)
  • "你只能在它们上面得到一个索引,(因为索引不能在初始声明语句之后创建") - 当初始声明语句包含多个逻辑构造时,知道物理创建索引,例如这包含两个UNIQUE`s:`DECLARE @T TABLE(ID1 INTEGER NOT NULL UNIQUE,ID2 INTEGER NOT NULL UNIQUE);`所以这肯定会创建两个索引,不是吗? (2认同)

CSh*_*Atl 5

这是对不同临时表的非常好的参考

临时表与变量