sql >> Database teknologi >  >> RDS >> Sqlserver

Udtrækning af attributter fra XML-felter i SQL Server 2008-tabel

Lige efter jeg havde postet spørgsmålet, faldt jeg over denne svar . Ved ikke hvorfor jeg ikke kunne finde det i tidligere søgninger. Det var det svar, jeg ledte efter. Her er forespørgslen, der virker:

Forespørgsel

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

Resultat

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

.

------ Rediger [2014-01-29] ------

Jeg fandt en anden sag, der er værd at tilføje til dette svar. Givet flere elementer i element, er det muligt at returnere alle noder ved at bruge cross application :

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

Dette eksempel returnerer følgende datasæt:

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. Begrænsning af antallet af hentede rækker MySql, Laravel

  2. Hvordan ved man, om en forespørgsel mislykkes i Laravel 4?

  3. Tæller forskellige bruger-id'er fra flere tabeller

  4. Returnerer sæt rækker fra plpgsql-funktionen.