【问题标题】:SQL XML column query for both attributes and elements属性和元素的 SQL XML 列查询
【发布时间】:2018-01-31 12:01:36
【问题描述】:

这是我在 SQL Server 中从 XML 列查询的第一次体验,我接近实现我想要的结果。

但是我需要帮助,因为我需要一些元素和属性 - 我成功获得了属性,但是这些元素被合并到一行中,而不是将它们拆分到不同的行中。

数据库中的 XML 记录示例:

<Attributes>
    <Map>
        <entry key="name" value="John Doe" />
        <entry key="department" value="Finance" />
        <entry key="employeeNumber" value="123456" />
        <entry key="phone">
            <value>
                <List>
                    <String>TBA</String>
                </List>
            </value>
        </entry>
        <entry key="OrgStructure">
            <value>
                <List>
                    <String>top</String>
                    <String>person</String>
                    <String>organizationalPerson</String>
                    <String>user</String>
                </List>
            </value>
        </entry>
        <entry key="Membership">
            <value>
                <List>
                    <String>Group1</String>
                    <String>Group2</String>
                    <String>Group3</String>
                </List>
            </value>        
        </entry>
    </Map>
</Attributes>   

SQL 查询:

    SELECT  

    m.c.value('@key', 'varchar(max)') as xmlkey,
    m.c.value('@value', 'varchar(max)') as xmlvalue,
    m.c.value('.', 'varchar(max)') as xmlString

    from #TEMPDB as s 

    cross apply s.attributes.nodes('Attributes/Map/entry') as m(c)

结果:

xmlkey            xmlvalue      xmlString

name              John Doe
department        Finance
employeeNumber    123456
phone             NULL          TBA
OrgStructure      NULL          toppersonorganizationalPersonuser
Membership        NULL          Group1Group2Group3

期望的结果:

xmlkey            xmlvalue      xmlString

name              John Doe
department        Finance
employeeNumber    123456
phone             NULL          TBA
OrgStructure      NULL          top
OrgStructure      NULL          person
OrgStructure      NULL          organizationalPerson
OrgStructure      NULL          user
Membership        NULL          Group1
Membership        NULL          Group2
Membership        NULL          Group3

如有任何帮助,我将不胜感激。谢谢!

【问题讨论】:

  • 这是一个很好的问题:样本,自己的努力,清晰的解释。从我这边 +1!

标签: sql-server xml tsql xpath xquery


【解决方案1】:

试试这样:

SELECT  
m.c.value('@key', 'varchar(max)') as xmlkey,
m.c.value('@value', 'varchar(max)') as xmlvalue,
n.s.value('text()[1]','nvarchar(max)') AS ListValue
from #TEMPAK2 as s 
cross apply s.attributes.nodes('Attributes/Map/entry') as m(c)
outer apply m.c.nodes('value/List/String') AS n(s);

我假设你有两种类型的&lt;entry&gt;

  • 名称-值对
  • 例如带有&lt;value&gt; 元素

看起来&lt;value&gt; 元素有一个 &lt;List&gt;&lt;String&gt; 结构。至少在所有情况下,您都会向我们展示。

【讨论】:

  • 嗨 Aadil,感谢编辑:-D 我测试了一个类型化的变量并复制粘贴了这个错误...
  • 我做了些许修改,但效果很好。谢谢!
猜你喜欢
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多