Почему символ возврата каретки исчезает при преобразовании строки в тип данных SQL Server XML?

Всякий раз, когда я анализирую строку для типа данных SQL XML, я замечаю, что возврат каретки исчезает всякий раз, когда смешиваются пробелы и возврат каретки XML. Если они не смешаны, все работает нормально. Кто-нибудь знает, почему это происходит?

См. приведенный ниже пример кода SQL.

DECLARE @var XML

PRINT 'This is a statement with two XML carriage-return characters'
SET @var = CONVERT (XML,'<root>Dear Sir,&#xD;&#xD;I am passing CR</root>',1)
SELECT @var

PRINT 'output is identical to a statement with two whitespace carriage-return characters'
SET @var = CONVERT (XML,'<root>Dear Sir,

I am passing CR</root>',1)
SELECT @var

PRINT 'Why does this statement only display one space? There is an XML carriage-return AND a whitespace carriage-return character.' 

--Make sure there is no space after &#xD; after you've copied and pasted the code 
SET @var = CONVERT (XML,'<root>Dear Sir,&#xD;
I am passing CR</root>',1)
SELECT @var

person Mathieu Diepman    schedule 27.05.2010    source источник


Ответы (1)


В Windows конец строки — CR-LF. В Unix конец строки — CR.

В первом примере вы используете CR-CR. Я предполагаю, что SQL Server интерпретирует их как окончания строк в стиле Unix, давая два пробела.

Второй пример вы набрали в Windows, давая CR-LF-CR-LF. Это интерпретируется как окончание строки в стиле Windows, дающее два пробела.

Ваш третий пример — CR-CR-LF. Очевидно, это интерпретируется как окончание строки в стиле Windows, что дает один пробел и непревзойденный CR.

Если вы измените свой третий пример на использование CR-LF или &#xD;&#xA;, он отобразит два пробела.

person Andomar    schedule 27.05.2010