另一个可能对您有用的杂凑 - 这取决于这里涉及多少个临时表。
将临时表创建为真实表,并添加一个名为 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”视为临时表 - 当然,您可能需要围绕此添加其他例程(可能还有更多列)以清除表中的旧/过时结果。
好吧,我承认,感觉也很丑。