我正在寻找一种简单或可管理的方式来读取 XML 文件,特别是 SQL Server 死锁的 XML 输出。我有一些服务器由于各种原因没有被监控。
我在 interwebz 上找到了以下代码,但它的输出只是 XML。
CREATE TABLE #errorlog (
LogDate DATETIME
, ProcessInfo VARCHAR(100)
, [Text] VARCHAR(MAX)
);
DECLARE @tag VARCHAR (MAX) , @path VARCHAR(MAX);
INSERT INTO #errorlog EXEC sp_readerrorlog;
SELECT @tag = text
FROM #errorlog
WHERE [Text] LIKE 'Logging%MSSQL\Log%';
DROP TABLE #errorlog;
SET @path = SUBSTRING(@tag, 38, CHARINDEX('MSSQL\Log', @tag) - 29);
SELECT
CONVERT(xml, event_data).query('/event/data/value/child::*') AS DeadlockReport,
CONVERT(xml, event_data).value('(event[@name="xml_deadlock_report"]/@timestamp)[1]', 'datetime')
AS Execution_Time
FROM sys.fn_xe_file_target_read_file(@path + '\system_health*.xel', NULL, NULL, NULL)
WHERE OBJECT_NAME like 'xml_deadlock_report';
有没有办法从这个 T-SQL 代码中获取原始 XML 输出并将其显示为死锁图或更易于阅读的文本?
您可以 bcp out 并将其另存为
.xdl
. 您可以通过多种方式做到这一点.. 例如 BCP OUT(我使用的是xp_cmdshell,但您可以使用 powershell 或任何其他方法)。从我的答案中借用代码(您需要根据您的要求调整代码):