sql >> Databáze >  >> RDS >> Sqlserver

Extrahování atributů z polí XML v tabulce SQL Server 2008

Těsně po odeslání otázky jsem narazil na tento odpověď . Nevím, proč jsem to nemohl najít v předchozím vyhledávání. To byla odpověď, kterou jsem hledal. Zde je dotaz, který funguje:

Dotaz

select Name
      ,xml_data.value('(/data/info/@x)[1]', 'int') as [Info.x]
      ,xml_data.value('(/data/info/@y)[1]', 'int') as [Info.y]
      ,xml_data.value('(/data/info/.)[1]', 'varchar(10)') as [Info]
from   #temp

Výsledek

Name     Info.x    Info.y    Info
-------  --------  --------  ---------
one         42        99     Red
two         27        72     Blue
three       16        51     Green
four        12        37     Yellow

.

------ Upravit [29.01.2014] ------

Našel jsem další případ, který stojí za to přidat k této odpovědi. Zadáno více <info> prvky v rámci <data> prvek, je možné vrátit všechny <info> uzly pomocí cross apply :

create table #temp (id int, name varchar(32), xml_data xml)

insert into #temp values
(1, 'one',   '<data><info x="42" y="99">Red</info><info x="43" y="100">Pink</info></data>'),
(2, 'two',   '<data><info x="27" y="72">Blue</info><info x="28" y="73">Light Blue</info></data>'),
(3, 'three', '<data><info x="16" y="51">Green</info><info x="17" y="52">Orange</info></data>'),
(4, 'four',  '<data><info x="12" y="37">Yellow</info><info x="13" y="38">Purple</info></data>')

select Name
      ,C.value('@x', 'int') as [Info.x]
      ,C.value('@y', 'int') as [Info.y]
      ,C.value('.', 'varchar(10)') as [Info]
from #temp cross apply
     #temp.xml_data.nodes('data/info') as X(C)

drop table #temp

Tento příklad vrátí následující datovou sadu:

Name      Info.x      Info.y      Info
--------- ----------- ----------- ----------
one       42          99          Red
one       43          100         Pink
two       27          72          Blue
two       28          73          Light Blue
three     16          51          Green
three     17          52          Orange
four      12          37          Yellow
four      13          38          Purple



  1. Jak používat klienta Oracle 11.2 s php (xampp) na win7 x64

  2. Jak používat OBJECT_ID() na mezidatabázových objektech na serveru SQL Server

  3. Ruby datetime vhodné pro srovnání mysql

  4. dotazování binárního sloupce pomocí jako na serveru SQL