表变量和临时表差不多,但是不会在临时库中存放。
与临时表相比,表变量具有下列优点:
表变量(如局部变量)具有明确定义的范围,在该范围结束时会自动清除这些表变量。 * 与临时表相比,表变量导致存储过程的重新编译更少。 * 涉及表变量的事务仅维持表变量上更新的持续时间。因此,使用表变量时,需要锁定和记录资源的情况更少。因为表变量具有有限的范围并且不是持久性数据库的一部分,所以事务回滚并不影响它们。
表变量例子:
declare @t table(id int identity,col varchar(4)) declare @sql1 varchar(60) declare @i int declare @n int set @sql1='吕布赵云马超典韦关羽张飞许褚黄忠颜良文丑庞德孙策' set @i=1 set @n=2 --定义分段长度 while(@i<len(@sql1)) begin insert into @t select substring(@sql1,@i,@n) set @i=@i+@n end select * from @t
?结果:
?
?临时表例子:
--declare @t table(id int identity,col varchar(4)) create table #t(id int identity,col VARCHAR(4)) declare @sql1 varchar(60) declare @i int declare @n int set @sql1='吕布赵云马超典韦关羽张飞' set @i=1 set @n=2 --定义分段长度 while(@i<len(@sql1)) begin insert into #t select substring(@sql1,@i,@n) set @i=@i+@n end select * from #t -- 结果:跟表对象结果相同 select * from #t for xml path('') --结果:<id>1</id><col>吕布</col><id>2</id><col>赵云</col><id>3</id><col>马超</col><id>4</id><col>典韦</col><id>5</id><col>关羽</col><id>6</id><col>张飞</col> select col from #t for xml path('') --结果:<col>吕布</col><col>赵云</col><col>马超</col><col>典韦</col><col>关羽</col><col>张飞</col> select col+',' from #t for xml path('') --结果:吕布,赵云,马超,典韦,关羽,张飞,
?
?