Như @gbn đã chỉ ra trong một câu trả lời khác và trên câu hỏi khác , " dữ liệu XML được lưu trữ nội bộ dưới dạng ucs- 2 "và SQL Server không bao gồm nó khi tạo dữ liệu. Tuy nhiên, bạn có thể chuyển đổi XML thành một chuỗi và nối khai báo XML vào đầu theo cách thủ công. Tuy nhiên, chỉ sử dụng UTF-8 trong khai báo sẽ không chính xác. Chuỗi Unicode mà SQL tạo ra nằm trong UCS-2. Ví dụ:chuỗi này sẽ không thành công:
SELECT CONVERT(xml,N'<?xml version="1.0" encoding="UTF-8"?>' + CONVERT(NVARCHAR(MAX),CONVERT(XML,N'<x>' + NCHAR(10176) + N'</x>')));
có lỗi:
Mặt khác, điều này sẽ hoạt động như mong đợi:
SELECT CONVERT(xml,N'<?xml version="1.0" encoding="UCS-2"?>' + CONVERT(NVARCHAR(MAX),CONVERT(XML,N'<x>' + NCHAR(10176) + N'</x>')));
Đây là mã sẽ tạo ra chuỗi XML đầy đủ, đầy đủ khai báo mà bạn tìm kiếm cho dữ liệu mẫu của mình:
DECLARE @Agents TABLE
(
AgentID int,
AgentName nvarchar(50),
AgentLocation nvarchar(100)
);
INSERT INTO @Agents (AgentID, AgentName, AgentLocation) VALUES (1, N'Mike', N'Sanfrancisco');
INSERT INTO @Agents (AgentID, AgentName, AgentLocation) VALUES (2, N'John', N'NY');
WITH BaseData AS
(
SELECT
(
SELECT
AgentID AS '@id',
AgentName AS 'Name',
AgentLocation AS 'Location'
FROM @Agents
FOR XML PATH('Agent'), ROOT('Agents'), TYPE
) AS AgentXML
), FullStringTable AS
(
SELECT
*,
'<?xml version="1.0" encoding="UCS-2"?>' +
CONVERT(nvarchar(max),AgentXML) AS FullString
FROM BaseData
)
SELECT
AgentXML AS OriginalXML,
FullString,
CONVERT(xml,FullString) AS FullStringConvertedToXML
FROM FullStringTable;