Sql-Server

如何從創建它的事務外部檢查全域臨時表

  • February 1, 2019

為了幫助調試一批 SQL(在事務中執行),在事務中我將一些數據轉儲到全域臨時表中。全域臨時表是在事務內部創建的(我沒有選擇,因為我不在這裡討論)。

我想我可以通過使用“with(nolock)”從事務外部(即在不同的連接下)從臨時表中進行選擇。但是,選擇被阻止完成。

有沒有辦法從事務外部的臨時表中進行選擇?

將此歸檔在“僅僅因為你可以,並不意味著你應該”下

如果您在第一個會話中生成綁定令牌,並以某種方式發布它,您可以從另一個會話加入其事務。

例如來自 spid 61:

if @@TRANCOUNT > 0 rollback
go
begin transaction

select *
into ##t
from sys.objects 


declare @bind_token varchar(255);  
exec sp_getbindtoken @bind_token output
declare @bind_token_bin as varbinary(128) = cast(@bind_token as varbinary(128))
set context_info @bind_token_bin

--rollback

然後從另一個會話

declare @bind_token varchar(255) = (
   select cast(context_info as varchar(255))
   from sys.dm_exec_sessions
   where session_id = 61
)

exec sp_bindsession @bind_token
go
select * from ##t

引用自:https://dba.stackexchange.com/questions/228597