我在SQL中进行一些XML查询,为了获得多个兄弟节点的属性,我需要执行以下查询:
select
C.value('@attribute[1]', 'varchar(30)')
from
tblData
cross apply
XmlFieldL.nodes('/Data/Children') as T(C)
默认情况下,[1]
仅提供第一项,因此交叉应用会绕过该项,并为每个子节点提供@attribute
的列表。很酷,效果很好。
我的问题是T(C)
周围的语法是什么?它看起来像乍看之下的某种功能,或者某种分组。我引用了C,但为什么需要T部分呢?语法是什么意思?
供参考,this was the original problem/solution并更好地描述它。我只是想了解我在这里做了什么。
答案 0 :(得分:2)
T
是派生表的别名。
C
是从/Data/Children
节点碎化的列名。
答案 1 :(得分:1)
基本上,.nodes()
调用返回一个“伪表”,每个匹配的XML片段都有一列。
这就是T
(对于伪表)和C
(伪表中的列)引用的内容