Генерация CRLF в TSQL для принятия SSRS
В TSQL я объединяю различные строки в одну ячейку с помощью: FOR xml path(''). Я помещаю следующие символы после каждой строки, чтобы получить перевод строки.
+ char(13) + char(10)
SSRS генерирует перевод строки, но также печатает эти символы CRLF. Каждая строка заканчивается: 
Есть ли решение?
1 ответ
XML, который вы производите с помощью простого FOR XML PATH('')
(для того, чтобы сделать что-то вроде STRING_AGG()
) переведет любой запрещенный символ (например, <, > and &
и многое другое) соответствующей организации. Сущность &abc;
, в то время как abc
обозначает характер (как <
) или вы видите какую-то шестнадцатеричную или юникодную кодовую точку. Это делается при создании XML-простоты. Чтение чего-либо из этого XML сделает процесс инверсии - опять же неявно.
Но: Ваш код не возвращает результат как собственный тип XML.
Попробуйте это (лучше всего переключить вывод на "текст"):
SELECT TOP 5 o.[name] + CHAR(13) + CHAR(10)
FROM sys.objects o
FOR XML PATH('')
возвращается
sysrscols
sysrowsets
sysclones
sysallocunits
sysfiles1
Но если вы обрабатываете XML как типизированный результат, вы можете использовать .value()
:
SELECT
(
SELECT TOP 5 o.[name] + CHAR(13) + CHAR(10)
FROM sys.objects o
FOR XML PATH(''),TYPE
).value('.','nvarchar(max)');
возвращается
sysrscols
sysrowsets
sysclones
sysallocunits
sysfiles1
Вы не показали никакого кода, но я предполагаю, что у вас есть что-то вроде
SELECT SomeColumn
,(SELECT blah + CHAR(13) + CHAR(10)
FROM SomeInnerTable
WHERE SomeCondition
FOR XML PATH('')) AS SomeAlias
FROM SomeOuterTable;
Изменить это на
SELECT SomeColumn
,(SELECT blah + CHAR(13) + CHAR(10)
FROM SomeInnerTable
WHERE SomeCondition
FOR XML PATH(''),TYPE).value('.','nvarchar(max)') AS SomeAlias
FROM SomeOuterTable;