我有一个片段,显示如何在sql server中查询xml数据,但很少有区域对我来说还不清楚。
DECLARE @xml XML
SET @xml = '<root>
<row>one</row>
<row>two</row>
<row>three</row>
</root>'
CREATE TABLE #Fields(Field varchar(MAX))
INSERT INTO #Fields
SELECT
x.y.value('text()[1]', 'varchar(5)')
FROM @xml.nodes('root/row') x(y)
SELECT * FROM #Fields
DROP TABLE #Fields
什么是x.y
我只是不明白,还有什么样的语法'text()[1]', 'varchar(5)'
如果text()
是内置函数,那么它是否适用于任何数据类型?
请帮我看一下x.y
??感谢
答案 0 :(得分:0)
.nodes()
调用将您的XML转换为 XML片段列表 - 并且SQL Server中的“列表”始终是表 - 所以这是实际上是表别名(x
)和列别名(y
),用于内部构造的XML片段表(每个“一行”一行)匹配.nodes()
)
如果你要使用.nodes('/root
)`那么你会得到一个包含这些行的“伪表”:
表x
y
----------------
<row>one</row>
<row>two</row>
<row>three</row>
由于您使用的是.nodes('/root/row')
,因此您实际上只获得了<row>
元素的值:
表x
y
----------------
one
two
three
.value()
现在接受其中一个XML片段并从中返回一些内容。它可以是子元素的名称 - 但是text()
(是的,内置的XQuery函数)只是将整个XML片段转换为文本表示。 .value()
调用的第二个参数只定义了该值应该被视为什么数据类型。