Tôi có một giá trị XML như thế này:
<R>
<I>A</I>
<I>B</I>
<I>C</I>
...
</R>
Tôi muốn nối tất cả các I
giá trị và trả về chúng dưới dạng một chuỗi : ABC...
.
Bây giờ tôi biết rằng tôi có thể hủy bỏ XML, tổng hợp lại các kết quả dưới dạng XML không gật đầu và áp dụng .values('text()[1]', ...)
cho kết quả:
SELECT
(
SELECT
n.n.value('text()[1]', 'varchar(50)') AS [text()]
FROM
@MyXml.nodes('/R/I') AS n (n)
FOR XML
PATH (''),
TYPE
).value('text()[1]', 'varchar(50)')
;
Tuy nhiên, tôi chỉ muốn làm tất cả những điều đó bằng cách sử dụng các phương thức XPath / XQuery, đại loại như thế này:
SELECT @MyXml. ? ( ? );
Có cách nào như vậy không?
Lý do tôi đang tìm kiếm một giải pháp theo hướng này là vì XML thực tế của tôi cũng chứa các yếu tố khác:
<R>
<I>A</I>
<I>B</I>
<I>C</I>
...
<J>X</J>
<J>Y</J>
<J>Z</J>
...
</R>
Và tôi muốn có thể trích xuất cả hai I
giá trị dưới dạng một chuỗi và các J
giá trị dưới dạng một chuỗi mà không phải sử dụng tập lệnh khó sử dụng cho mỗi giá trị.