Comme le souligne @gbn dans une autre réponse et sur une autre question , "les données XML sont stockées en interne en tant que ucs- 2 ", et SQL Server ne l'inclut pas lors de la production des données. Cependant, vous pouvez convertir le XML en chaîne et ajouter manuellement la déclaration XML au début. Cependant, utiliser simplement UTF-8 dans la déclaration serait inexact. La chaîne Unicode produite par SQL se trouve dans UCS-2. Par exemple, cela échouera :
SELECT CONVERT(xml,N'<?xml version="1.0" encoding="UTF-8"?>' + CONVERT(NVARCHAR(MAX),CONVERT(XML,N'<x>' + NCHAR(10176) + N'</x>')));
avec erreur :
Ceci, en revanche, fonctionnera comme prévu :
SELECT CONVERT(xml,N'<?xml version="1.0" encoding="UCS-2"?>' + CONVERT(NVARCHAR(MAX),CONVERT(XML,N'<x>' + NCHAR(10176) + N'</x>')));
Voici le code qui produira la chaîne XML complète chargée de déclarations que vous recherchez pour vos exemples de données :
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;