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

Làm cách nào để truy vấn một giá trị trong cột SQL Server XML

select
  Roles
from
  MyTable
where
  Roles.value('(/root/role)[1]', 'varchar(max)') like 'StringToSearchFor'

Trong trường hợp cột của bạn không phải là XML , bạn cần phải chuyển đổi nó. Bạn cũng có thể sử dụng cú pháp khác để truy vấn các thuộc tính nhất định của dữ liệu XML của mình. Đây là một ví dụ ...

Giả sử cột dữ liệu đó có:

<Utilities.CodeSystems.CodeSystemCodes iid="107" CodeSystem="2" Code="0001F" CodeTags="-19-"..../>

... và bạn chỉ muốn những cái mà CodeSystem = 2 thì truy vấn của bạn sẽ là:

select 
  [data] 
from
  [dbo].[CodeSystemCodes_data]
  
where
  CAST([data] as XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@CodeSystem)[1]', 'varchar(max)') = '2'

Các trang này sẽ cho bạn biết thêm về cách truy vấn XML trong T-SQL:

Truy vấn các trường XML bằng t-sql

Làm phẳng dữ liệu XML trong SQL Server

CHỈNH SỬA

Sau khi chơi với nó nhiều hơn một chút, tôi đã kết thúc với truy vấn tuyệt vời này sử dụng ÁP DỤNG CHÉO. Cái này sẽ tìm kiếm mọi hàng (vai trò) cho giá trị bạn đặt trong biểu thức like của mình ...

Với cấu trúc bảng này:

create table MyTable (Roles XML)

insert into MyTable values
('<root>
   <role>Alpha</role>
   <role>Gamma</role>
   <role>Beta</role>
</root>')

Chúng tôi có thể truy vấn nó như thế này:

select * from 

(select 
       pref.value('(text())[1]', 'varchar(32)') as RoleName
from 
       MyTable CROSS APPLY

       Roles.nodes('/root/role') AS Roles(pref)
)  as Result

where RoleName like '%ga%'

Bạn có thể kiểm tra SQL Fiddle tại đây:http://sqlfiddle.com/#!18/dc4d2/1/0



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ba thắng lợi về hiệu suất máy chủ SQL dễ dàng

  2. Chuyển một chuỗi được phân tách bằng dấu phẩy thành các hàng riêng lẻ

  3. Cách tăng tốc máy chủ SQL của bạn bằng cách sử dụng giám sát hiệu suất cơ sở dữ liệu

  4. Cách kiểm tra xem một thủ tục được lưu trữ có tồn tại hay không trước khi tạo nó

  5. Cách sử dụng tìm kiếm ngữ nghĩa trong SQL Server