在SQL Server 2008中,临时表和表变量有什么区别

在 SQL Server 中,Microsoft 引入了表变量。我们可以使用表变量来存储我们用来在临时表中存储数据的数据。
除此之外,以下是表变量和临时表之间的区别。

  • 临时表是只存在于创建它们的会话中的表。当该会话时间完成时,表在会话终止时自动销毁,而表变量用作变量,我们将存储在临时表中的数据存储其中。在表变量中,我们声明了一个表类型的变量。这是我们存储记录的临时表的替代方案。
  • 临时表可以有索引,但表变量只能有主索引。
  • 表名在表变量中可以为 128 个字符,而在临时表中最多为 116 个字符。
  • 表变量的范围仅限于当前批次,而在临时表中也是所有会话和嵌套存储过程。
  • 表变量在表名前用@ 符号定义,而临时表在表名前用# 符号定义。

事务对表变量和临时表的影响

表变量是事务中立的,因为不记录表变量的事务日志。表变量不受事务影响,因为它们的范围非常有限。

例子

1.事务对临时表的影响

记录没有被插入。这表明,临时表将绑定到事务策略。

create table #temp (id int,name varchar(16),salary int)
begin tran ins
insert into #temp
select 1,'jack',1500 union all
select 2,'tom',2500 union all
select 2,'bob',1800 ;

select * from #temp;
rollback tran ins;
select * from #temp

2.事务对表变量的影响

甚至我们还提供了回滚事务。记录在表变量中还是可用。这表示没有为表变量记录事务日志。

declare @tempval table(id int,name varchar(15), salary int)
begin tran ins
insert into @tempval
select 1,'jack',1500 union all
select 2,'tom',2500 union all
select 2,'bob',1800 
select * from @tempval;
rollback tran ins;
select * from @tempval
日期:2020-06-02 22:17:45 来源:oir作者:oir