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 sont retournés exactement tels quels. Dans 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"/>
    

Voir aussi

Référence

Prise en charge FOR XML des différents types de données SQL Server

Aide et Informations

Assistance sur SQL Server 2005