Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Теряется символ в XML  [new]
andsm
Member

Откуда: Москва
Сообщений: 1320
Блог
Пытаюсь сейчас заставить один запрос с XML работать, что-то не получается.
Есть запрос:
declare @OBJECTS xml

set @OBJECTS = N'<root>
<object><![CDATA[
abc\
def
]]></object>
</root>'

SELECT 
      [Value] = T.c.value('.','nvarchar(MAX)')
   FROM @OBJECTS.nodes('/root/object') T(c)

Я от него ожидаю что он вернет:

abc\
def
А запрос возвращает
 abcdef 
Пропадает начальный перевод строки, заменяется на пробел. И теряется символ "\" с последующим переходом на новую строку. Это решается если добавить еще один такой символ и еще один перевод строки. Но непонятно почему это происходит. Вроде такого поведения в CDATA быть не должно. Чем это может быть вызвано?
31 янв 13, 14:30    [13857124]     Ответить | Цитировать Сообщить модератору
 Re: Теряется символ в XML  [new]
Гость333
Member

Откуда:
Сообщений: 3683
andsm
Чем это может быть вызвано?

Это вызвано тем, что бэкслэш в строковых константах имеет специальное значение: http://msdn.microsoft.com/en-us/library/dd207007.aspx
\ (Backslash) (Transact-SQL)
Breaks a long string constant into two or more lines for readability.

И пример там прям как у вас
SELECT 'abc\
def' AS ColumnResult;
31 янв 13, 14:38    [13857201]     Ответить | Цитировать Сообщить модератору
 Re: Теряется символ в XML  [new]
Glory
Member

Откуда:
Сообщений: 104751
andsm
И теряется символ "\" с последующим переходом на новую строку.

Это фичи студии

declare @OBJECTS xml

set @OBJECTS = N'<root>
<object><![CDATA[
abc\'+CHAR(13)+CHAR(10)+
'def
]]></object>
</root>'

SELECT 
      [Value] = T.c.value('.','nvarchar(MAX)')
   FROM @OBJECTS.nodes('/root/object') T(c)
31 янв 13, 14:38    [13857206]     Ответить | Цитировать Сообщить модератору
 Re: Теряется символ в XML  [new]
andsm
Member

Откуда: Москва
Сообщений: 1320
Блог
Спасибо, понял.
31 янв 13, 14:57    [13857405]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить