SQL Server中如何用nodes()方法替代OPENXML实现相同操作?
使用nodes()替代OPENXML解析XML数据(SQL Server)
完整替代代码
DECLARE @MyXML XML = '<data><Row><Name>Name A</Name><Type>T1</Type></Row><Row><Name>Name B</Name><Type>T2</Type></Row></Data>' SELECT aaa.value('(Name)[1]', 'NVARCHAR(100)') AS Value, aaa.value('(Type)[1]', 'NVARCHAR(100)') AS Type INTO #temp1 FROM @MyXML.nodes('/Data/Row') AS T(aaa) -- 验证结果 SELECT * FROM #temp1
代码说明
@MyXML.nodes('/Data/Row') AS T(aaa):将XML中所有匹配/Data/Row路径的节点拆分为独立行,aaa代表每个Row节点的引用。aaa.value('(Name)[1]', 'NVARCHAR(100)'):通过XPath路径(Name)[1]定位当前Row节点下的第一个<Name>子节点,提取其文本值并转换为指定数据类型;Type字段的提取逻辑完全一致。- 最终生成的
#temp1临时表会包含两行数据,与预期结果一致:Value | Type --------|----- Name A | T1 Name B | T2
对比原OPENXML代码的优势
- 无需调用
sp_xml_preparedocument和sp_xml_removedocument管理XML文档句柄,避免手动释放资源的繁琐操作。 - 代码更简洁直观,直接基于XML变量解析节点,性能和可读性更优。
内容的提问来源于stack exchange,提问作者MightyMouse
相关产品推荐
相关产品推荐

