Еще один ключ, который может работать для вас - это зависит от того, сколько временных таблиц здесь задействовано.
Создайте свои временные таблицы как реальные таблицы с дополнительным столбцом под названием 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» в некоторой степени как временную таблицу - конечно, вам может понадобиться добавить дополнительные подпрограммы вокруг этого (и, возможно, больше столбцов) для очистки таблицы старых / устаревших результатов.
Хорошо, я признаю, это тоже ужасно.