2

我有一个具有以下给定格式的 xml 变量,我确实需要动态读取元素名称及其各自的字段值并将其加载到某些 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 - 根可以包含 N 个元素 2 - 每个元素可以包含 N 个子元素 3 - 我需要创建一个例程,能够检索所有信息并且还能够通过提供一个元素名称来过滤掉(ei:对于给定的元素,返回其所有子元素)。

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

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

分辨率

这篇文章帮助我解决了我的问题。感谢所有回复的人。

4

2 回答 2

2

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

@InputXml.nodes('/Root/Element2[@Name = ''otherElementName'']//SubElement') t(c);
于 2012-03-12T22:10:21.107 回答
1

尝试这个:

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

结果:

subelementFielName
于 2012-03-12T22:10:28.707 回答