Vấn đề của bạn:
-
Bạn thử sử dụng đầu ra của
SelectChild
, thuộc loại XML, là nội dung của thuộc tính@ListDirectChildren
. Bạn không thể sử dụng XML ở nơi này, do đó nó được xử lý (và thoát) như văn bản bình thường. Bạn đang cố gắng tạo một loại danh sách con đệ quy? -
Trong truy vấn bên ngoài của bạn, bạn truyền XML thành
VARCHAR(MAX)
(btw:sử dụng luônNVARCHAR
trong câu chuyện với XML). Một lần nữa, bạn sẽ buộc công cụ coi văn bản này là văn bản và do đó thoát khỏi nó. -
Bạn cố gắng thêm chuỗi "null" để thể hiện sự thiếu giá trị. Nhưng XML hoạt động khác:a. Phần tử bị thiếu hoàn toàn trong XML:Truy vấn nó sẽ trả về
NULL
, điều đó ổn.b. Đối với một số quy tắc, Phần tử phải có ở đó, nhưng không được để trống:
<ListDirectChildren></ListDirectChildren>
hoặc<ListDirectChildren />
(nghĩa là hoàn toàn giống nhau). Truy vấntext()
của nút và bạn nhận đượcNULL
, điều đó cũng tốt.c. Đối với một số quy tắc, bạn muốn đánh dấu phần tử là
NULL
. Sử dụngXSINIL
Hãy thử điều này để biết các biến thể của empty
và null
:
DECLARE @x XML=
'<root>
<testempty1 />
<testempty2></testempty2>
</root>';
SELECT @x.value('(/root/testempty1)[1]','nvarchar(max)') AS testempty1_Content
,@x.value('(/root/testempty1/text())[1]','nvarchar(max)') AS testempty1_Text
,@x.value('(/root/testempty2)[1]','nvarchar(max)') AS testempty2_Content
,@x.value('(/root/testempty2/text())[1]','nvarchar(max)') AS testempty2_Text
,@x.value('(/root/NotExistingElement)[1]','nvarchar(max)') AS NotExistingElement_Content
,@x.value('(/root/NotExistingElement/text())[1]','nvarchar(max)') AS NotExistingElement_Text
Kết quả:
Content Text
testempty1 "" NULL
testempty2 "" NULL
NotExistingElement NULL NULL
Hãy thử điều này cho XSINIL
SELECT NULL AS test FOR XML RAW, ELEMENTS XSINIL
để lấy cái này
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<test xsi:nil="true" />
</row>
Đề xuất của tôi:
Câu hỏi này
hy vọng được giải quyết. Vui lòng bắt đầu một câu hỏi mới trong đó bạn thêm một số dữ liệu khác vào kịch bản mẫu của mình để phản ánh nhiều phần tử con, đặt một liên kết đến câu hỏi này và nêu kết quả mong đợi (XML sẽ trông như thế nào).