Sql-Server

有沒有辦法從 xml 中獲取 sp_whoisactive 的隔離級別到普通結果中?

  • May 17, 2017

雖然我發現自己正在使用 sys.sysprocesses 和 sys.dm_exec_session 視圖重新設計 sp_who / sp_whoisactive 的功能,以了解有關在我的伺服器上執行的會話和事務的概述,但我想:“不,而是使用已經可用的東西並經過測試!

exec sp_whoisactive @get_additional_info = 1; 

返回一個提供大量資訊的附加 XML 列,其中之一是Isolation Level

我想在 sp_whoisactive 的主要結果集中設置隔離級別。有沒有人有同樣的要求並且已經解決了?為什麼它不從頭開始包含在主要結果集中,因為它是一個重要資訊。

sp_whoisactive

使用 sp_whoisactive 的內置功能返回結果集的架構,您可以將該資訊儲存在臨時表中,然後用於CROSS APPLY從附加資訊中提取一個或多個 xml 節點

--Drop temp table 
IF OBJECT_ID('tempdb.dbo.sp_whois_active') IS NOT NULL  
   DROP TABLE tempdb.dbo.sp_whois_active 

--Use 'return_schema' to create a temp table to hold the results of sp_whoisactive
DECLARE @s VARCHAR(MAX)

EXEC sp_WhoIsActive @output_column_list = '[%]'
   ,@return_schema = 1
   ,@schema = @s OUTPUT
   ,@get_additional_info = 1

SET @s = REPLACE(@s, '<table_name>', 'tempdb.dbo.sp_whois_active')

EXEC (@s)

--Populate the temp table by executing sp_whoisactive
EXEC sp_WhoIsActive @output_column_list = '[%]'
   ,@destination_table = 'tempdb.dbo.sp_whois_active'
   ,@get_additional_info = 1

--Select all of the columns from the temp table and
--use CROSS APPLY to extract one or more xml nodes
SELECT who.*
   ,N.C.value('transaction_isolation_level[1]', 'varchar(100)') IsolationLevel
FROM tempdb.dbo.sp_whois_active who
CROSS APPLY additional_info.nodes('//additional_info') N(C)

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