Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Trích xuất các thuộc tính từ các trường XML trong Bảng SQL Server 2008

Ngay sau khi tôi đăng câu hỏi, tôi đã tình cờ thấy điều này câu trả lời . Không biết tại sao tôi không thể tìm thấy nó trong những lần tìm kiếm trước. Đó là câu trả lời mà tôi đang tìm kiếm. Đây là truy vấn hoạt động:

Truy vấn

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

Kết quả

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

.

------ Chỉnh sửa [2014-01-29] ------

Tôi tìm thấy một trường hợp khác đáng để thêm vào câu trả lời này. Cung cấp nhiều <info> các phần tử trong <data> , có thể trả về tất cả <info> bằng cách sử dụng 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

Ví dụ này trả về tập dữ liệu sau:

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. Xóa số khỏi máy chủ sql chuỗi

  2. Operand type clash:varchar không tương thích với varchar (50) đang cố gắng chèn vào cơ sở dữ liệu được mã hóa

  3. Cách chuyển đổi nvarchar sang thập phân trong SQL

  4. Nghiên cứu điển hình về nâng cấp phần cứng máy chủ cơ sở dữ liệu SQL Server

  5. Thay đổi các loại cột trong một bảng lớn