从SQL Server中具有相同标记名称的XML中提取值

时间:2017-12-05 07:54:43

标签: sql sql-server xml

我在下面定义了XML变量及其值。

我想在单个查询中获取标记<TextNodeChild>之间定义的文本。

请帮助。

Declare @XMLVariable = 
'<?xml version="1.0"?>
 <root>  
     <TextNodeParent>
         <TextNodeChild>12345</TextNodeChild>
         <TextNodeChild>67890</TextNodeChild>
         <TextNodeChild>12389</TextNodeChild>
     </TextNodeParent>
 </root>'

我需要这样的输出:

12345
67890
12389

2 个答案:

答案 0 :(得分:0)

您可以使用XQuery(即XML查询).nodes()方法

SELECT 
    TextNodeParent = n.value('.[1]', 'NVARCHAR(max)') 
FROM
    @XMLVariable.nodes('root/TextNodeParent/*') as p(n)

编辑:如果您只想选择TextNodeChild节点数据,那么xml路径几乎没有变化,如下所示

 @XMLVariable.nodes('root/TextNodeParent/TextNodeChild') as p(n)

结果

TextNodeParent
12345
67890
12389

答案 1 :(得分:0)

@ YogeshSharma的解决方案在这里工作 - 因为你的<TextNodeChild>节点下只有<TextNodeParent>元素。

但是,如果您有各种节点,并且想要提取 <TextNodeChild>个并获取其值(并忽略所有其他节点),则必须使用这样的事情:

SELECT 
    TextNodeParent = XC.value('.', 'INT')
FROM
    @XMLVariable.nodes('root/TextNodeParent/TextNodeChild') as XT(XC)