जैसा कि @gbn एक अन्य उत्तर में बताता है और एक अन्य प्रश्न पर , "XML डेटा आंतरिक रूप से ucs के रूप में संग्रहीत किया जाता है- 2 ", और SQL सर्वर डेटा का उत्पादन करते समय इसे शामिल नहीं करता है। हालाँकि, आप XML को एक स्ट्रिंग में बदल सकते हैं और शुरुआत में मैन्युअल रूप से XML घोषणा को जोड़ सकते हैं। हालाँकि, केवल घोषणा में UTF-8 का उपयोग करना गलत होगा। यूनिकोड स्ट्रिंग जो SQL उत्पन्न करता है वह UCS-2 में है। उदाहरण के लिए, यह विफल हो जाएगा:
SELECT CONVERT(xml,N'<?xml version="1.0" encoding="UTF-8"?>' + CONVERT(NVARCHAR(MAX),CONVERT(XML,N'<x>' + NCHAR(10176) + N'</x>')));
त्रुटि के साथ:
दूसरी ओर, यह अपेक्षा के अनुरूप काम करेगा:
SELECT CONVERT(xml,N'<?xml version="1.0" encoding="UCS-2"?>' + CONVERT(NVARCHAR(MAX),CONVERT(XML,N'<x>' + NCHAR(10176) + N'</x>')));
यहां कोड है जो आपके उदाहरण डेटा के लिए खोजी जाने वाली पूर्ण, घोषणा-युक्त XML स्ट्रिंग का उत्पादन करेगा:
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;