另一个杂牌可能为你工作 - 这取决于许多临时表是如何这里涉及。
创建临时表,作为真实的表,一个名为SPID一个额外的列,默认为@@SPID
。
然后创建基于@@SPID
值访问这些表的视图,但过滤器。所有通过这个视图进行的操作都应该看起来像是按照每个会话进行隔离的。例如:
create table temp_Boris (
SPID int default @@SPID,
ColA int,
ColB varchar(10)
)
go
create view vBoris
as
select ColA,ColB from temp_Boris where SPID = @@SPID
go
然后,在一个连接,运行以下命令:
insert into vBoris(ColA,ColB)
select 10,'abc' union all
select 20,'def'
go
select * from vBoris
,并在另一个连接,运行以下命令:
insert into vBoris(ColA,ColB)
select 10,'abc' union all
select 20,'def'
go
select * from vBoris
select * from temp_Boris
go
delete from vBoris
go
select * from vBoris
select * from temp_Boris
,你会看到每个连接能够把“vBoris”有点像一个临时表 - 当然,你可能需要添加解决这个(可能更多列)的附加程序来清除旧/过时的结果表。
好吧,我承认,它也感觉很丑。
这就是我提到的kludge。我很可能需要这样做。 – 2011-03-07 10:36:26