在 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