Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengekstrak Atribut dari Bidang XML di Tabel SQL Server 2008

Tepat setelah saya memposting pertanyaan, saya menemukan jawaban . Tidak tahu mengapa saya tidak dapat menemukannya di pencarian sebelumnya. Itu adalah jawaban yang saya cari. Inilah kueri yang berfungsi:

Kueri

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

Hasil

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

.

------ Sunting [2014-01-29] ------

Saya menemukan kasus lain yang layak ditambahkan ke jawaban ini. Diberikan beberapa <info> elemen dalam <data> elemen, dimungkinkan untuk mengembalikan semua <info> node dengan menggunakan 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

Contoh ini mengembalikan kumpulan data berikut:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 Cara Mendapatkan Bahasa Default Login di SQL Server (T-SQL)

  2. Bisakah saya membuat SQL Server memanggil proc yang disimpan setiap n detik?

  3. Mengembalikan Daftar Fungsi Partisi di SQL Server (T-SQL)

  4. Format SQL di SQL Server Management Studio

  5. Pengenalan OPENJSON dengan Contoh (SQL Server)