如何使用node()方法从指定XML提取属性,编写的查询报错如何解决
问题排查
- XPath大小写不匹配:XML节点名称大小写敏感,实际XML根节点为小写
root,SQL语句中使用了大写开头的Root,导致nodes()方法无法匹配到对应节点,触发运行错误。 - 取值方法使用错误:
query('.')仅能返回XML节点片段,无法直接提取属性的文本值,需使用value()方法读取属性内容。
解决方案
修正后的SQL语句如下:
-- 示例XML变量声明,可替换为你实际的XML变量 DECLARE @x XML = '<root><startsite personID="1" SaleID="2" regionID="3"/> </root>' SELECT T.c.value('@personID', 'INT') AS personID, T.c.value('@SaleID', 'INT') AS SaleID, T.c.value('@regionID', 'INT') AS regionID FROM @x.nodes('/root/startsite') T(c)
代码说明
- 修正了XPath路径的大小写错误,将
/Root/startsite改为/root/startsite,和实际XML节点名称保持一致。 - 使用
value()方法读取属性:@+属性名是XPath中读取属性的标准语法,第二个参数为属性值要转换的SQL数据类型,可根据实际需求修改为VARCHAR等其他类型。 - 若XML中存在多个
startsite节点,该语句会自动逐行返回每个节点对应的三个属性值。
内容的提问来源于stack exchange,提问作者Phh
相关产品推荐
相关产品推荐

