- XQuery Chống lại Loại Dữ liệu xml
- Các Trường hợp Sử dụng XQuery Chung
- XQueries Liên quan đến Phân cấp
-
Mọi thứ trong blog của Michael Rys
Cập nhật
Lời khuyên của tôi là chia nhỏ XML thành các quan hệ và thực hiện tìm kiếm và tham gia vào quan hệ được kết quả, theo kiểu định hướng tập hợp, chứ không phải theo kiểu thủ tục tìm kiếm các nút cụ thể trong XML. Đây là một truy vấn XML đơn giản chia nhỏ các nút và thuộc tính quan tâm:
select x.value(N'../../../../@stepId', N'int') as StepID
, x.value(N'../../@id', N'int') as ComponentID
, x.value(N'@nom',N'nvarchar(100)') as Nom
, x.value(N'@valeur', N'nvarchar(100)') as Valeur
from @x.nodes(N'/xml/box/components/component/variables/variable') t(x)
Tuy nhiên, nếu bạn phải sử dụng XPath truy xuất chính xác giá trị quan tâm:
select x.value(N'@valeur', N'nvarchar(100)') as Valeur
from @x.nodes(N'/xml/box[@stepId=sql:variable("@stepID")]/
components/component[@id = sql:variable("@componentID")]/
variables/variable[@nom="Enabled"]') t(x)
Nếu stepID và ID thành phần là cột, không phải biến, bạn nên sử dụng sql:column () thay vì sql:variable trong bộ lọc XPath. Xem Dữ liệu quan hệ ràng buộc bên trong dữ liệu XML .
Và nếu tất cả những gì bạn cần là kiểm tra sự tồn tại, bạn có thể sử dụng tồn tại ( ) Phương thức XML:
select @x.exist(
N'/xml/box[@stepId=sql:variable("@stepID")]/
components/component[@id = sql:variable("@componentID")]/
variables/variable[@nom="Enabled" and @valeur="Yes"]')