Tôi có tài liệu đã nhập xml được lưu trữ dưới dạng văn bản. Vì vậy, tôi sử dụng CONVERT kiểu dữ liệu thành xml bằng cách sử dụng Biểu thức bảng chung để có thể sử dụng các phương pháp XML:Truy vấn XML() hoạt động, giá trị() yêu cầu singleton tìm thấy xdt: untypedAtomic
WITH xoutput AS (
SELECT CONVERT(xml, t.requestpayload) 'requestpayload'
FROM TABLE t
WHERE t.methodid = 1)
SELECT x.requestpayload.query('declare namespace s="http://blah.ca/api";/s:validate-student-request/s:student-id') as studentid
FROM xoutput x
Công việc truy vấn, trả về phần tử của tôi. Nhưng tôi chỉ quan tâm đến giá trị:
WITH xoutput AS (
SELECT CONVERT(xml, t.requestpayload) 'requestpayload'
FROM TABLE t
WHERE t.methodid = 1)
SELECT x.requestpayload.value('declare namespace s="http://blah.ca/api";/s:validate-student-request/s:student-id', 'int') as studentid
FROM xoutput x
này mang lại cho tôi những lỗi sau:
'value()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'
Những gì tôi đã googled nói rằng XPATH/XQUERY cần phải được bên trong ngoặc đơn và/hoặc cần "[1]" - cả hai đều không hoạt động. Chỉ có một phần tử sinh viên-id trong xml, mặc dù tôi đoán lược đồ cho phép nhiều hơn?
Ngoài ra, có rất nhiều giá trị phần tử tôi muốn truy xuất - có cách nào để khai báo không gian tên một lần thay vì cho mỗi cuộc gọi phương thức không?
Khi tôi hiểu nó '[1]' chỉ trả về kết quả đầu tiên trong khi '.value ('.'' Trả về tất cả kết quả. –