【问题标题】:How to read data from an XML variable?如何从 XML 变量中读取数据?
【发布时间】:2012-03-12 21:50:24
【问题描述】:

我有一个具有以下给定格式的 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 - 我需要创建一个例程,既能够检索所有信息,又能够通过提供一个元素名称进行过滤(例如:对于给定元素,返回其所有子元素)。

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

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

分辨率

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

【问题讨论】:

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


    【解决方案1】:

    我从查询的开头删除了 'N' 字符并且它有效 :)

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

    【讨论】:

    • 如果 N 在正确的位置也可以工作,例如@InputXml.nodes(N'/Root/...'
    【解决方案2】:

    试试这个:

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

    结果:

    subelementFielName
    

    【讨论】:

    • 我认为 N 应该仍然在开头(正好在正确的位置),以涵盖真正的 Unicode 数据曾经包含在元素名称中的外部机会。
    猜你喜欢
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多