ghostzxp说得很对,#temp生存期可以在连接期.我现在也发现函数是用不了#temp的,要用也只能用存储过程.可是存储过程又不能这样 select * from dbo.procedureTest我的天,真是头都大,难道SQL 2000也没有办法好好的解决这个问题吗?请大家帮我想想一个有效的办法.要应付多用户情况的.
学习中。。 难道SQL 2000也没有办法好好的解决这个问题吗?我想不可能吧?!
--方法1. --存储过程 create proc p_test as insert # select top n * from tb where .... go--调用前,先建立临时表 create table #(.....) exec p_test select * from # go
--方法2,使用动态的全局临时表名 create proc p_test @tablename sysname output --输出当前用户调用生成的临时表名 as set @tablename='[##'+rtrim(newid())+']' exec('select top n * into '+@tablename+' from tb where ...') go--调用 declare @tablename sysname exec p_test @tablename out exec('select * from '+@tablename)
难道SQL 2000也没有办法好好的解决这个问题吗?我想不可能吧?!
--存储过程
create proc p_test
as
insert # select top n * from tb where ....
go--调用前,先建立临时表
create table #(.....)
exec p_test
select * from #
go
create proc p_test
@tablename sysname output --输出当前用户调用生成的临时表名
as
set @tablename='[##'+rtrim(newid())+']'
exec('select top n * into '+@tablename+' from tb where ...')
go--调用
declare @tablename sysname
exec p_test @tablename out
exec('select * from '+@tablename)