Sybase的临时表是一个存放在系统库tempdb中的表对象。表名前加上#号,就表示你创建的是一个临时表。在执行一些复杂查询的时候,临时表能够作为临时数据存储中间结果,从而简化查询的复杂度,适当的使用临时表还能大大提高查询效率。临时表通常只对创见者可见,虽然鼓励用户在结束之前清理临时表,但系统仍会对临时表进行管理,并在用户退出时自动删除仍存在的临时表。
先执行:
select top 10 * into #zz1 from ktran go create proc testpc2 as begin select * from #zz1 select top 10 * into #zz2 from kbrch end go drop table #zz1 go
后执行:
select top 10 * into #zz2 from kbrch go create proc testpc1 as begin select top 10 * into #zz1 from ktran exec testpc2 select * from #zz2 end go drop table #zz2 go
只有这样,才能正常创建两个过程,因sybase存储过程的特点,若里面所用到的表在过程创建时不存在,则会报错而无法继续,对临时表也一样。
testpc1过程中,创建临时表#zz1,然后调用testpc2过程,在testpc2中查询显示#zz1的内容,可见能够正常显示。而在testpc2中创建了临时表#zz2,待testpc1中调用完testpc2后查询#zz2表时,却显示无此对象。可以验证,父过程中的临时表对子过程可见可用,而子过程中的临时表在执行结束后释放,因而对父过程是不可见的。
原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/530.html