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

Откуда:
Сообщений: 205
Есть некоторый код
	DECLARE @LetterBody VARCHAR(MAX);
	SET @LetterBody = (SELECT
		 convert(varchar,ClientCode) + ';' +
		 convert(varchar,ClientName) + ';' +
		 convert(varchar,BrokerComis) + ';' +
		 CHAR(13)
		FROM @BrokerComisTable
		FOR XML PATH(''));
	PRINT @LetterBody

Но он выводит строки не по отдельности, а как одну строку:

E400001;Иванов Ю.В.;873.54; E400002;Сидоров Г.Ф.;3.96;
Т. е. он символ возврата коретки выводит как последовательность знаков . Как это исправить?
12 фев 14, 14:39    [15557154]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
Degun
Member

Откуда:
Сообщений: 205
Здесь редактор из разделил на две строки. Т. е. выводятся следующим образом:
E400001;Иванов Ю.В.;873.54;
E400002;Сидоров Г.Ф.;3.96;
12 фев 14, 14:42    [15557185]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
так правильно
12 фев 14, 14:44    [15557202]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
Degun
Member

Откуда:
Сообщений: 205
Вопрос в том, как записать конструкцию запроса, чтобы возврат коретки не трансформировался в последовательность символов
&#x0D
12 фев 14, 14:48    [15557236]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
Glory
Member

Откуда:
Сообщений: 104764
Degun
Т. е. он символ возврата коретки выводит как последовательность знаков
. Как это исправить?

BOL - Serialization of XML Data
Entitization of XML Characters During Serialization

Following are the entitization rules that apply during serialization:

...


To prevent a carriage return (CR, U+000D) from being normalized during parsing, it is entitized to its numeric character reference, 
 inside both attribute values and element content.
....


Сообщение было отредактировано: 12 фев 14, 14:49
12 фев 14, 14:48    [15557244]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
вы же xml юзаете.
заменяйте после получения replace-ом в итоговой строке
12 фев 14, 14:50    [15557258]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
Glory
Member

Откуда:
Сообщений: 104764
Degun
Вопрос в том, как записать конструкцию запроса, чтобы возврат коретки не трансформировался в последовательность символов

Не делать xml
12 фев 14, 14:50    [15557264]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
Degun
Member

Откуда:
Сообщений: 205
Konst_One
Спасибо. Заменил в строке на CHAR(13).
12 фев 14, 15:03    [15557404]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
Degun
Вопрос в том, как записать конструкцию запроса, чтобы возврат коретки не трансформировался в последовательность символов
&#x0D
declare @s varchar(max);

select
 @s = (
  select
   '1' + char(13) + '2'
  for xml path(''), type).value('.', 'varchar(max)');

print @s;
12 фев 14, 15:12    [15557473]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
Перевод строки - это чаще всего два символа: CHAR(0x0D)+CHAR(0x0A)
Carriage Return & Line Feed - CR & LF
12 фев 14, 15:25    [15557592]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Перенос строки в конструкции FOR XML PATH  [new]
AlexUssr
Member

Откуда:
Сообщений: 8
добрый день!
Подскажите, пожалуйста, а как в представлении с группировкой с xml получить перенос строки. У меня - результат строка без переноса, а предложенные варианты выдают ошибки неправильного синтаксиса
представление выборки из таблицы test с полями :

txt1 txt2
1 1
1 2



SELECT txt1,
(SELECT txt2 + char(13) + char(10) + ', ' AS 'data()'
FROM dbo.test t2
WHERE txt1 = txt1
FOR xml path(''), type) AS Gruppa
FROM dbo.test t1
GROUP BY txt1


Выдает результат :

1 1 , 2 ,



а мне нужно

1 1 ,
2 ,
4 ноя 18, 12:02    [21723557]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
AlexUssr
Member

Откуда:
Сообщений: 8


К сообщению приложен файл. Размер - 31Kb
4 ноя 18, 12:17    [21723563]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36693
Выполнить запрос в студии (New Query) и установить Result to text.

Не все редакторы обязаны вам рисовать переносы строки в результатах выполнения.
4 ноя 18, 12:20    [21723564]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
AlexUssr
Member

Откуда:
Сообщений: 8
Клиент коды переноса показывает, переноса строк не получается.

К сообщению приложен файл. Размер - 9Kb
4 ноя 18, 12:29    [21723566]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
AlexUssr
Member

Откуда:
Сообщений: 8
Прошу прощенья, я не профессионал, запрос в студии (New Query) тоже не получается, в чем ошибка?
Может быть есть способ группировки по одному полю таблицы со сложением значений другого поля через запятую без использования xml path(''), ... ?
4 ноя 18, 13:06    [21723578]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
AlexUssr
Member

Откуда:
Сообщений: 8


К сообщению приложен файл. Размер - 33Kb
4 ноя 18, 13:06    [21723580]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
AlexUssr
Member

Откуда:
Сообщений: 8
Подскажите, пожалуйста, почему этот код не работает, в чем ошибка?

К сообщению приложен файл. Размер - 47Kb
4 ноя 18, 13:22    [21723585]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36693
автор
Подскажите, пожалуйста, почему этот код не работает, в чем ошибка?
Ошибка в синтаксисе, который вы нафантазировали.
4 ноя 18, 13:25    [21723586]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
select
 a.txt1, b.x.value('.', 'varchar(max)')
from
 (select distinct txt1 from dbo.test) a cross apply
 (select txt2 + ',' + char(10) + char(13) from dbo.test where txt1 = a.txt1 for xml path(''), type) b(x);
4 ноя 18, 13:28    [21723588]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
AlexUssr
Member

Откуда:
Сообщений: 8
Извиняюсь, не ту картинку отправил:

К сообщению приложен файл. Размер - 17Kb
4 ноя 18, 13:28    [21723589]     Ответить | Цитировать Сообщить модератору
 Re: Перенос строки в конструкции FOR XML PATH  [new]
AlexUssr
Member

Откуда:
Сообщений: 8
Клиент на этот код магическим образом корректно отреагировал.
Спасибо большое !!!

К сообщению приложен файл. Размер - 6Kb
4 ноя 18, 13:34    [21723592]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить