在sql server 2005中查询XML数据

时间:2014-03-21 14:02:33

标签: sql-server xml

我有一个片段,显示如何在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 ??感谢

1 个答案:

答案 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()调用的第二个参数只定义了该值应该被视为什么数据类型。