如何从XML变量中读取数据?

时间:2012-03-12 21:50:24

标签: xml sql-server-2008 tsql xquery-sql

我有一个带有以下给定格式的xml变量,我确实需要通过dinamically读取并加载一些T-SQL结构中的元素名称及其各自的字段值:

declare @InputXml   xml
Set @InputXml = '<Root RootName="rooNameValueHere">
            <Element Name="elementName">
                <SubElement Field="subelementFielName"/>
            </Element>
            <Element Name="otherElementName">
                <SubElement Field="subelementFielName1"/>
                <SubElement Field="subelementFielName2"/>
                <SubElement Field="subelementFielName3"/>
            </Element>
        </Root>'

提示: 1 - Root可以包含N个元素 2 - 每个元素可以包含N个子元素 3 - 我需要创建一个能够检索所有信息并且能够通过提供一个元素名称(e.i:给定元素,返回其所有子元素)过滤掉的例程。

现在,我已经编写了这个T-SQL来获取给定一个元素名称的subElements但是我得到一个空值:

select 
    t.c.value('@Field', 'nvarchar(10)') AS SomeAlias
from
    @InputXml.nodes('N/Root/Element[@Name = ''elementName'']//SubElement') t(c);

解决方案

post帮助我解决了我的问题。感谢所有回复的人。

2 个答案:

答案 0 :(得分:2)

我从查询开头删除了'N'char,它可以工作:)

@InputXml.nodes('/Root/Element2[@Name = ''otherElementName'']//SubElement') t(c);

答案 1 :(得分:1)

试试这个:

select 
    t.c.value('@Field', 'nvarchar(100)') AS SomeAlias
from
    @InputXml.nodes(N'/Root/Element[@Name = "elementName"]/SubElement') t(c);

结果:

subelementFielName