【问题标题】:XML query fetch attributes as records/rowsXML 查询获取属性作为记录/行
【发布时间】:2013-05-07 16:44:27
【问题描述】:

我有以下 xml 并希望将所有记录作为行获取。我的xml如下..

<category ccode="ct8">
  <columns>
    <col colcode="cl_prodn" displaytext="Prodname" responsetype="textbox" tooltip="testts" isrequired="" displayorder="1" />
    <col colcode="cl_descs" displaytext="Descs" responsetype="textarea" tooltip="atser" isrequired="on" displayorder="2" />
  </columns>
</category>

我想要两行类别 ccode = ct8。这两行将显示所有属性。我正在尝试使用以下查询,但它只返回一个和第一个。

select CatConfig.value('(category/columns/col/@colcode)[1]', 'varchar(50)') from categories where CategoryId = 8

【问题讨论】:

    标签: sql sql-server-2008 tsql xquery


    【解决方案1】:

    有很多方法可以分解 xml,但我相信这可能会帮助您提供更多概念:

    declare @xml xml = 
    '<category ccode="ct8">
      <columns>
        <col colcode="cl_prodn" displaytext="Prodname" responsetype="textbox" tooltip="testts" isrequired="" displayorder="1" />
        <col colcode="cl_descs" displaytext="Descs" responsetype="textarea" tooltip="atser" isrequired="on" displayorder="2" />
      </columns>
    </category>'
    
    -- get them one at a time by hunting for specific identifier
    select @xml.query('(category/columns/col[@displaytext = "Prodname"])')  -- queries for node
    select @xml.value('(category/columns/col[@displaytext = "Prodname"]/@colcode)[1]', 'varchar(max)')  -- gives value of node by description
    select @xml.value('(category/columns/col[@displaytext = "Descs"]/@colcode)[1]', 'varchar(max)')
    
    
    -- get them all at once with the (reference).(column).nodes method applied to an xml value in a table.
    declare @X table ( x xml);
    
    insert into @X values (@xml)
    
    select 
        t.query('.')
    ,   t.value('(@colcode)[1]', 'varchar(max)')
    from @X a
     cross apply a.x.nodes('//category/columns/col') as n(t)
    

    【讨论】:

    • 感谢您的意见。真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多