Compatibilidad con FOR XML para tipos de datos de cadena

En SQL Server 2000, los caracteres de espacio en blanco de los datos se devuelven exactamente tal cual. En SQL Server 2005, se crea una entidad para el XML generado por los caracteres de espacio en blanco de FOR XML en los datos.

En el ejemplo siguiente se crea una tabla de ejemplo T y se insertan datos de ejemplo que incluyen los caracteres de avance de línea, retorno de carro y tabulación. La instrucción SELECT recupera los datos de la tabla.

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

El resultado es el siguiente:

  <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" />

Observe lo siguiente en la consulta anterior:

  • Se crea la entidad &#xD para el retorno de carro de la primera fila.

  • Se crea la entidad &#x09 para el carácter de tabulación de la segunda fila.

  • Se crea la entidad &#xA para el carácter de avance de línea de la tercera fila.

En SQL Server 2000, se recibiría el resultado que se muestra a continuación, puesto que no se crean entidades para los espacios en blanco:

<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"/>