Prise en charge de FOR XML pour les types de données string

Dans SQL Server 2000, les caractères espace dans les données étaient retournés exactement tels quels. À compter de SQL Server 2005, le code XML généré par les caractères espace FOR XML dans les données est décomposé en entités.

Dans l'exemple ci-dessous, un exemple de table T est créé et des données y sont insérées parmi lesquelles les caractères saut de ligne, retour chariot et tabulation. L'instruction SELECT extrait les données de la table.

CREATE TABLE T
(
  c1 int identity primary key,
  c2 varchar(100)
)
go
 
insert T (c2) values ('Special character 0xD for carriage return ' + convert(varchar(10), 0xD) + ' after carriage return')
insert T (c2) values ('Special character 0x9 for tab ' + convert(varchar(10), 0x9) + ' after tab' )
insert T (c2) values ('Special character 0xA for line feed ' + convert(varchar(10), 0xA) + ' after line feed')
go
SELECT * 
FROM T
FOR XML AUTO
go

Voici le jeu de résultats obtenu :

  <T c1="1" c2="Special character 0xD for carriage return &#xD; after carriage return" />
  <T c1="2" c2="Special character 0x9 for tab &#x09; after tab" />
  <T c1="3" c2="Special character 0xA for line feed &#xA; after line feed" />

Observez ce qui suit dans la requête précédente :

  • Le retour chariot de la première ligne est défini comme l'entité &#xD.

  • La tabulation de la deuxième ligne est définie comme l'entité &#x09.

  • Le saut de ligne de la troisième ligne est défini comme l'entité &#xA.

Dans SQL Server 2000, les caractères espace ne sont pas convertis en entités, c'est pourquoi vous obtiendriez le résultat suivant :

<T c1="1" c2="Special character 0xD for carriage return  after carriage return"/>
<T c1="2" c2="Special character 0x9 for tab     after tab"/>
<T c1="3" c2="Special character 0xA for line feed 
 after line feed"/>