select
Roles
from
MyTable
where
Roles.value('(/root/role)[1]', 'varchar(max)') like 'StringToSearchFor'
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 cách sử dụ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ó thêm một chút nữa, tôi đã kết thúc với truy vấn tuyệt vời này sử dụng CROSS ỨNG DỤNG . 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 thích của bạn ...
Cho 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 ta 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/#!3/ae0d5/13
Nó trả lời tất cả câu hỏi của tôi,
– Hoàng Thế Minh 04:12:46 27/04/2012[1]
làm gì trong câu trả lời của bạn?Câu trả lời tuyệt vời, tôi bỏ phiếu cho câu hỏi này, nhưng chuỗi nên là varchar tôi đoán
– Lý Diệu Thúy 04:13:09 27/04/2012@Bistro Hỏi về
– Hồ Hoàng Duy 05:37:49 27/04/2012[1]
là một câu hỏi thực sự tốt. Điều đó có nghĩa là bạn chọn giá trị vai trò đầu tiên từ XML và điều đó có nghĩa là điều này sẽ chỉ hoạt động để tìmAlpha
trong xml mẫu của bạn. Nó sẽ không tìm thấy hàng nếu bạn tìm kiếmBeta
.Trong trường hợp của tôi, tôi đã phải truy vấn các nút có giá trị thuộc tính cụ thể. Câu trả lời này đã dẫn đến giải pháp của tôi. Tôi chỉ phải đặt dấu ngoặc kép xung quanh giá trị thuộc tính.
– Lê Việt Yến 18:31:07 20/01/2014Nếu XML có một không gian tên, làm thế nào để chúng ta truy vấn nó?
– Bùi Hà Khuê 22:35:10 10/05/2018