日期:2014-05-16  浏览次数:20409 次

【例子】表变量与临时表例子

表变量和临时表差不多,但是不会在临时库中存放。

与临时表相比,表变量具有下列优点:

表变量(如局部变量)具有明确定义的范围,在该范围结束时会自动清除这些表变量。 * 与临时表相比,表变量导致存储过程的重新编译更少。 * 涉及表变量的事务仅维持表变量上更新的持续时间。因此,使用表变量时,需要锁定和记录资源的情况更少。因为表变量具有有限的范围并且不是持久性数据库的一部分,所以事务回滚并不影响它们。

表变量例子

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('')
	  --结果:吕布,赵云,马超,典韦,关羽,张飞,

?

?