代码改变世界

SQL Convert XML to Table

2015-03-30 14:17  caixia9  阅读(1866)  评论(0编辑  收藏  举报
  •  将xml nodes 属性中的值 转为table 形式
  declare @xml2 xml
  set @xml2 = '<CMADatas>
  <CMAData CmaName="EventCfgItem" CmaValue="sap-abc1a01" />
  <CMAData CmaName="EventNode" CmaValue="" />
  <CMAData CmaName="EventSource" CmaValue="" />
  <CMAData CmaName="EventType" CmaValue="" />
  <CMAData CmaName="EventTypeInstance" CmaValue="" />
</CMADatas>'
 select S.value('@CmaName', 'varchar(36)') as CmaName
          , S.value('@CmaValue', 'varchar(36)') as CmaName
 from @xml2.nodes('/CMADatas/CMAData') as T(S)

 

  • 将 xml tag标签的中值 转为 table 格式
DECLARE @xml xml='<mssql version="10.50.4000" name="Microsoft SQL Server Developer Edition (64-bit)">
  <type name="Windows 7 Main Server">
    <tag KeyValue="enabled">
      <boolean>true</boolean>
    </tag>
    <tag KeyValue="disabled">
      <tag method="Read">
        <type name="Windows 8 virtual pc">
          <tag KeyValue="uniqueKey">
            <string>SQL Server 2008</string>
          </tag>
          <tag KeyValue="value 8GB">
            <string>SQL Server 2000</string>
          </tag>
        </type>
      </tag>
      <tag method="Read">
        <type name="Windows 8 virtual pc">
          <tag KeyValue="primaryKey">
            <string>SQL Server 2008 R2 SP1</string>
          </tag>
          <tag KeyValue="value 8GB">
            <string>SQL Server 2005 SP3</string>
          </tag>
        </type>
      </tag>
      <tag method="Write">
        <type name="Windows Server 2008 virtual pc">
          <tag KeyValue="primaryKey">
            <string>SQL Server 2008 R2 SP2</string>
          </tag>
          <tag KeyValue="value 10GB">
            <string>SQL Server 2012</string>
          </tag>
        </type>
      </tag>
    </tag>
  </type>
</mssql>';

SELECT    b.c.value('@version', 'varchar(100)') [version]
        ,b.c.value('@name', 'varchar(200)') [Name]
        ,f.c.value('@name', 'varchar(200)') [ServerName]
        ,r.c.value('@KeyValue', 'varchar(50)') [KeyValue]
        ,r.c.value('(boolean)[1]', 'varchar(25)') [boolean]
        ,k.c.value('@method', 'varchar(25)') [method]
        ,k.c.value('@name', 'varchar(25)') [virtual_pc]
        ,y.c.value('@KeyValue', 'varchar(25)') [KeyValue]
        ,y.c.value('(string)[1]', 'varchar(25)') [string]
FROM @xml.nodes('mssql') b(c)
        CROSS APPLY b.c.nodes('type')  f(c)
            CROSS APPLY f.c.nodes('tag')  r(c)
                CROSS APPLY f.c.nodes('tag/tag')  k(c)
        --            CROSS APPLY f.c.nodes('tag/tag/type') t(c)
                        CROSS APPLY f.c.nodes('tag/tag/type/tag')  y(c);