XML là bonkers
Khi bạn thêm chuỗi nối, bạn sẽ mất "phần tử đường dẫn".
Ví dụ: nếu bạn làm điều này:
SELECT t.type + '/' AS type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML PATH('');
SELECT t.type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML PATH('type');
Bạn lấy lại cái này:
<type>Green/</type>
<type>Blue/</type>
<type>Red/</type>
Tên cột hoặc bí danh đóng vai trò là thành phần đường dẫn.
Một số ví dụ khác có thể giúp
Sử dụng RAW, ELEMENTS
SELECT t.type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, ELEMENTS;
SELECT t.type + '/' AS type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, ELEMENTS;
Trong ví dụ đầu tiên, bạn nhận được tên thành phần "hàng" chung, nhưng trong lần thứ hai bạn nhận được hàng / loại.
Khi sử dụng RAW, TYPE
:
SELECT t.type + '/' AS type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, TYPE;
SELECT t.type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, TYPE;
Truy vấn đầu tiên trả về XML hợp lệ-ish, lần thứ hai đưa ra lỗi vì phần tử đường dẫn thiếu mã định danh.
Sử dụng AUTO
, bí danh bảng và tên cột biến thành đường dẫn:
SELECT type + '/' AS type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;
SELECT type
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;
Nhưng không có bí danh, bạn sẽ gặp một lỗi tương tự:
SELECT type + '/'
FROM ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;
Tôi muốn lấy một ví dụ với FOR XML EXPLICIT
nhưng nó sẽ vô trách nhiệm khi tôi bắt đầu uống ngay bây giờ.