【问题标题】:T-SQL XML to retrieve attribute value and the respective element valueT-SQL XML 检索属性值和相应的元素值
【发布时间】:2013-07-07 16:10:21
【问题描述】:

我的表中有一个 XML 列。此列称为 UserDef。 Xml 看起来像这样:

<UserDefs>
    <UserDef id="EmpNum">002</UserDef>
    <UserDef id="EmpDept">AUT</UserDef>
    <UserDef id="EmpName">XYZ ABC</UserDef>
    <UserDef id="EmpHireDate">2009-11-01T23:59:00-06:00</UserDef>
</UserDefs>

查询应该是什么样子才能返回这样的结果:

Column1     Column2 
--------------------
EmpNum      002
EmpDept     AUT
EmpName     XYZ ABC
EmpHireDate 2009-11-01 23:59:00

谢谢。

【问题讨论】:

    标签: tsql sql-server-2005 sqlxml xml-column


    【解决方案1】:
    declare @xml xml
    set @xml = '<UserDefs>
                <UserDef id="EmpNum">002</UserDef>
                <UserDef id="EmpDept">AUT</UserDef>
                <UserDef id="EmpName">XYZ ABC</UserDef>
                <UserDef id="EmpHireDate">2009-11-01T23:59:00-06:00</UserDef>
                </UserDefs>'
    
    select R.nref.value('./@id[1]','nvarchar(200)') as Column1,
       R.nref.value('./text()[1]','nvarchar(200)') as Column2
    from @xml.nodes('/UserDefs/*') R(nref);
    

    考虑为您的真实数据使用适当的 varchar/nvarchar 类型长度 您还需要正确转换日期值

    如果我们需要从表中选择:

    declare @xml xml
    set @xml = '<UserDefs>
            <UserDef id="EmpNum">002</UserDef>
            <UserDef id="EmpDept">AUT</UserDef>
            <UserDef id="EmpName">XYZ ABC</UserDef>
            <UserDef id="EmpHireDate">2009-11-01T23:59:00-06:00</UserDef>
            </UserDefs>'
    
    declare @txml table(UserDef xml)
    insert into @txml values (@xml);
    
    select 
    a.value('./@id[1]','nvarchar(200)') as Column1,
    a.value('./text()[1]','nvarchar(200)') as Column2
    from @txml 
    CROSS APPLY UserDef.nodes('/UserDefs/*') AS tbl(a)
    

    【讨论】:

    • 我需要从表的 xml 列中获取值。如何调整您的 sn-p 以从表而不是 XML 变量进行查询?
    猜你喜欢
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 2021-01-04
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多