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