我从网站www.SQLauthority.com
获取此查询:
DECLARE @MyXML XML
SET @MyXML = '<SampleXML>
<Colors>
<Color1>White</Color1>
<Color2>Blue</Color2>
<Color3>Black</Color3>
<Color4 Special="Light">Green</Color4>
<Color5>Red</Color5>
</Colors>
<Fruits>
<Fruits1>Apple</Fruits1>
<Fruits2>Pineapple</Fruits2>
<Fruits3>Grapes</Fruits3>
<Fruits4>Melon</Fruits4>
</Fruits>
</SampleXML>'
SELECT
a.b.value('Colors[1]/Color1[1]','varchar(10)') AS Color1,
a.b.value('Colors[1]/Color2[1]','varchar(10)') AS Color2,
a.b.value('Colors[1]/Color3[1]','varchar(10)') AS Color3,
a.b.value('Colors[1]/Color4[1]/@Special','varchar(10)')+' '+
+a.b.value('Colors[1]/Color4[1]','varchar(10)') AS Color4,
a.b.value('Colors[1]/Color5[1]','varchar(10)') AS Color5,
a.b.value('Fruits[1]/Fruits1[1]','varchar(10)') AS Fruits1,
a.b.value('Fruits[1]/Fruits2[1]','varchar(10)') AS Fruits2,
a.b.value('Fruits[1]/Fruits3[1]','varchar(10)') AS Fruits3,
a.b.value('Fruits[1]/Fruits4[1]','varchar(10)') AS Fruits4
FROM @MyXML.nodes('SampleXML') a(b)
我无法更好地了解节点从xml数据中获取的方式。
我对此几乎没有疑问。
这里的a(b)
是什么?
如果我在颜色中有另一个节点并且附加了所有现有的子节点,结构将如何改变?
即:
<Colorss>
<Colors>
<Color1>White</Color1>
<Color2>Blue</Color2>
<Color3>Black</Color3>
<Color4 Special="Light">Green</Color4>
<Color5>Red</Color5>
</Colors>
<Colorss>
<Fruits>
<Fruits1>Apple</Fruits1>
<Fruits2>Pineapple</Fruits2>
<Fruits3>Grapes</Fruits3>
<Fruits4>Melon</Fruits4>
</Fruits>
a.b.value
是什么意思?当我鼠标悬停它时显示一个派生表。我可以查看表格的值吗?我们将不胜感激。
答案 0 :(得分:2)
这是什么(b)?
对.nodes('SampleXML')
的调用是一个XQuery函数,它返回一个伪表,该表包含此XPath表达式匹配的每个元素的一个XML片段列 - a(b)
是表别名(a
)表示该列,b
是包含XML片段的伪表中列的名称。
a.b.value
是什么意思?
这是基于上述内容 - a
是表别名,用于该临时内联伪表,b
是列名称对于该表中的列,.value()
是另一个XQuery函数,它将根据XPath表达式(第一个参数)从XML中提取单个值,并将它作为第二个参数中指定的数据类型返回。 / p>
您应该查看SQL Server中对XQuery支持的介绍,以便更好地理解:
并且还有许多关于XQuery的其他介绍和教程 - 只需使用您最喜爱的搜索引擎进行搜索,您就会获得大量的点击量!
答案 1 :(得分:1)
这是我的刺伤@ it:
DECLARE @MyXML XML SET @MyXML = '<SampleXML> <Colors> <Color1>White</Color1> <Color2>Blue</Color2> <Color3>Black</Color3> <Color4 Special="Light">Green</Color4> <Color5>Red <Color6>Black44</Color6> <Color7>Black445</Color7> </Color5> </Colors> <Fruits> <Fruits1>Apple</Fruits1> <Fruits2>Pineapple</Fruits2> <Fruits3>Grapes</Fruits3> <Fruits4>Melon</Fruits4> </Fruits> </SampleXML>'
得到一个内心的孩子
选择 a.c.value('Colors 1 / Color1 1','varchar(10)')AS Color1, a.c.value('Colors 1 / Color2 1','varchar(10)')AS Color2, a.c.value('Colors 1 / Color3 1','varchar(10)')AS Color3, a.c.value('Colors 1 / Color4 1 / @ Special','varchar(10)')AS Color4, a.c.value('Colors 1 / Color5 1','varchar(10)')AS Color5, a.c.value('Colors 1 / Color5 1 / Color7 1','varchar(50)')AS Color6a, acvalue('Colors 1 / Color5 1 / Color6 1','varchar(50)')AS Color6b,acvalue('Fruits 1 / Fruits1 {{ 3}}','varchar(10)')AS Fruits1, a.c.value('Fruits 1 / Fruits2 1','varchar(10)')AS Fruits2, a.c.value('Fruits 1 / Fruits3 1','varchar(10)')AS Fruits3, a.c.value('Fruits 1 / Fruits4 1','varchar(10)')AS Fruits4 FROM @ MyXML.nodes('SampleXML')a(c)
使用查询表达式/ root / Color(n)的nodes()方法调用将返回一个包含三行的行集,每行包含原始XML文档的逻辑副本,并且上下文项设置为一的节点 1