Генерация CRLF в TSQL для принятия SSRS

В TSQL я объединяю различные строки в одну ячейку с помощью: FOR xml path(''). Я помещаю следующие символы после каждой строки, чтобы получить перевод строки. + char(13) + char(10) SSRS генерирует перевод строки, но также печатает эти символы CRLF. Каждая строка заканчивается: 
Есть ли решение?

1 ответ

Решение

XML, который вы производите с помощью простого FOR XML PATH('') (для того, чтобы сделать что-то вроде STRING_AGG()) переведет любой запрещенный символ (например, <, > and & и многое другое) соответствующей организации. Сущность &abc;, в то время как abc обозначает характер (как &lt;) или вы видите какую-то шестнадцатеричную или юникодную кодовую точку. Это делается при создании XML-простоты. Чтение чего-либо из этого XML сделает процесс инверсии - опять же неявно.

Но: Ваш код не возвращает результат как собственный тип XML.

Попробуйте это (лучше всего переключить вывод на "текст"):

SELECT TOP 5 o.[name] + CHAR(13) + CHAR(10)
FROM sys.objects o
FOR XML PATH('')

возвращается

sysrscols&#x0D;
sysrowsets&#x0D;
sysclones&#x0D;
sysallocunits&#x0D;
sysfiles1&#x0D;

Но если вы обрабатываете 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;
Другие вопросы по тегам