TSQL中xml.nodes的T(N)语法与N.value()用法疑问
TSQL XML节点拆分语法说明
1. nodes()方法的作用
nodes()是SQL Server中XML类型的内置方法,作用是将XML对象中符合指定XPath路径的所有节点拆分为多行结果集。
你给出的示例中,首先将原字符串A,B,C,D,E转换为了如下XML结构:
<X>A</X> <X>B</X> <X>C</X> <X>D</X> <X>E</X>
调用@xml.nodes('X')就是把所有<X>节点拆分为5行,每行对应一个独立的<X>节点对象。
2. as T(N)的语法含义
这是TSQL中给nodes()返回的结果集设置别名的固定写法,和普通SQL给表起别名的逻辑一致,只是XML节点结果集需要同时指定两个别名:
T是整个多行结果集的表别名,可以替换为任意合法标识符,比如tmp、xml_tab都不影响运行- 括号内的
N是结果集里的列别名,该列存储每行对应的单个XML节点对象,同样可以替换为任意合法标识符,比如x、single_node都可以
3. N.value()的含义
N就是刚才定义的、存储单个XML节点的列名。value()是XML节点对象的内置方法,作用是从节点中提取指定内容并转换为SQL的基础类型:
- 第一个参数是XPath路径,
.代表取当前节点本身的文本内容 - 第二个参数是要转换的目标SQL类型,示例中是转换为最长10位的varchar类型
你可以将别名自定义为其他值,运行结果和原代码完全一致,比如:
SELECT single_node.value('.', 'varchar(10)') as value FROM @xml.nodes('X') as xml_tab(single_node)
注意:该语法为SQL Server独有的XML查询扩展,不属于标准SQL规范。
内容的提问来源于stack exchange,提问作者Zuries
相关产品推荐
相关产品推荐

