SQL解析XML文档如何提取指定节点的@ID属性值
解决方案
你原有代码里的XPath路径索引位置写反,@ID[2]的含义是取当前RequestorID节点的第2个ID属性,但XML节点下同一属性名唯一,因此无法正常取值。你需要先匹配第2个RequestorID节点后再取它的ID属性,调整路径即可:
DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX) SELECT @XML = XMLData FROM XMLData EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML SELECT [RID] FROM OPENXML(@hDoc, 'OTA_HotelPmsInfoNotif/HotelReservations/HotelReservation') WITH ( [RID] varchar(5) '../../POS/Source/RequestorID[2]/@ID' ) EXEC sp_xml_removedocument @hDoc GO
更推荐使用SQL Server原生的XML节点查询方法,无需手动管理文档句柄,避免内存泄漏风险,示例如下:
DECLARE @XML AS XML SELECT @XML = XMLData FROM XMLData SELECT T.HotelReservation.value('(../../POS/Source/RequestorID[2]/@ID)[1]', 'varchar(5)') AS RID FROM @XML.nodes('OTA_HotelPmsInfoNotif/HotelReservations/HotelReservation') AS T(HotelReservation)
内容的提问来源于stack exchange,提问作者LukaszP
相关产品推荐
相关产品推荐

