Поддержка FOR XML для строковых типов данных

В SQL Server 2000 пробельные символы в данных возвращались в неизменном виде. Начиная с версии SQL Server 2005, пробельные символы XML-кода, формируемого инструкцией FOR XML, преобразуются в сущности.

В следующем примере создается образец таблицы T, в который вставляются данные, содержащие символы перевода строки, возврата каретки и табуляции. Инструкция SELECT получает данные из таблицы.

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

Результат:

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

Обратите внимание на следующие особенности предыдущего запроса.

  • Символ возврата каретки в первой строке представлен в виде сущности &#xD.

  • Символ табуляции во второй строке представлен в виде сущности &#x09.

  • Символ перевода строки в третьей строке представлен в виде сущности &#xA.

В SQL Server 2000 был бы получен следующий результат, в котором пробельные символы в сущности не преобразуются:

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