sql - SQL 2008 中的临时表和表变量有什么区别?

标签 sql sql-server sql-server-2008 tsql temp-tables

有什么区别:

CREATE TABLE #temp ( [ID] INT)

INSERT INTO #temp
SELECT ...

DECLARE @temp TABLE ( [ID] INT)

INSERT @temp
SELECT ...

在 SQL Server 2008 中?

最佳答案

临时表在大多数特性上与普通表相似,只是它们进入 TempDB 而不是当前数据库,并且在有限范围后消失(取决于它们是基于 session 的临时表还是全局临时表。但是对数据的所有更改临时表被记录到事务日志中,以及由此带来的所有性能影响。另外,您还可以向临时表添加任意数量的索引、 View 、触发器或任何其他您想要的内容,就像向普通表添加一样.

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

   Declare @Tab Table (myKey integer Primary Key Not Null, data varchar(20)) 

由于这些特征,临时表对于大型表(宽且行多)和/或在其生命周期内将经历多种访问模式来说是更好的选择,而当您需要非常多的访问模式时,表变量是最好的选择。窄表(仅键表,或仅具有一个数据列的键),该表将始终由该索引键访问...

关于sql - SQL 2008 中的临时表和表变量有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1597309/

相关文章:

sql - 如何在 SQL Server 2008 中删除具有对象依赖关系的列?

sql - 有没有数据库支持相互递归查询

sql server 2005错误输出

Python pymssql 尝试启动新的 Adaptive Server 操作,结果待处理

sql - 如何在 SQL Server 2012 中搜索数据库中所有表中的列名?

SQL Server 单查询内存使用情况

c# - SSIS For Each循环中的脚本任务-写入文件

mysql - 构建 SQL 查询来连接三个表以获取消息传递信息

PHP搜索功能显示null

mysql - 创建 View 和性能