SQL Server XQuery三大方法分工明确:.nodes()将XML拆解为行集,.value()提取单个标量值,.query()返回XML片段;须按nodes→value/query顺序组合使用。
SQL Server 的 XQuery 方法(.nodes()、.value()、.query())是用来处理 XML 类型数据的核心函数,它们分工明确:.nodes() 用于“拆解”XML 成行集,.value() 用于提取单个标量值,.query() 用于返回 XML 片段。用对了,解析 XML 就很清爽;用混了,容易报错或结果为空。
它接收一个 XPath 表达式,把匹配到的每个节点作为一行返回,结果是带 XML 类型列的派生表。必须配合 APPLY 使用,不能单独写在 SELECT 列表里。
常见写法:
FROM @xml.nodes('/root/item') AS T(c) —— 把每个 节点变成一行,别名 T,列名 c 是该节点的 XML 实例c 调用 .value() 或 .query()
它只能作用于一个节点(所以常跟在 .nodes() 后),第二个参数是 SQL Server 数据类型(如 'int'、'varchar(50)'、'datetime'),必须加单引号。
关键细节:
text()(取文本内容)、@attr(取属性)、.(取当前节点全部文本)isnull(c.value('(...)[1]', 'int'), 0) 防错([1] 很重要,强制取第一个)c.value('(name/text())[1]', 'nvarchar(50)') 取 适合保留结构、嵌套内容或后续再解析的场景。它不转换类型,只做“裁剪”。
典型用法:
c.query('address') —— 提取当前节点下的 元素及其所有子节点
c.query('*/phone') —— 提取所有层级下的
祖先)>),不会报错基本上就这些。记住口诀:要转行用 .nodes(),要取值用 .value(),要留结构用 .query()。三者常组合使用,顺序一般是 nodes → value/query,别反着来。