You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server如何从死锁XML数据中提取lastbatchstarted属性值

问题原因

你的XPath查询路径缺失了deadlock节点层级:从给出的XML结构可以看到,process-list是deadlock节点的子节点,而deadlock才是value节点的直接子节点,你原有路径跳过了deadlock层,所以无法匹配到目标节点。

修正后的查询语句

直接补全路径即可正常取值,代码如下:

[XML Data].value('(/event/data[@name="xml_report"]/value/deadlock/process-list/process/@lastbatchstarted)[1]','datetime')

特殊情况兼容处理

如果你的xml_report的value节点内存储的是转义后的XML字符串(不是直接嵌套的XML节点,多出现于旧版本SQL Server扩展事件存储结果),需要先将内容转为XML类型再取值,代码如下:

-- 先提取xml_report的字符串内容转为XML,再执行属性查询
CAST([XML Data].value('(/event/data[@name="xml_report"]/value/text())[1]','nvarchar(max)') AS XML)
    .value('(/deadlock/process-list/process/@lastbatchstarted)[1]','datetime')

补充说明

  • lastbatchstarted属性值本身不带时区标识,返回的datetime类型为SQL Server实例所在时区的本地时间
  • 如果需要精准取死锁牺牲进程的对应属性值,可以额外加条件筛选process的id与victim-list下的victimProcess的id匹配

内容的提问来源于stack exchange,提问作者Avi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:54:08