在 TSQL 中生成 CRLF 以供 SSRS 接受

Generate CRLF in TSQL to be accepted by SSRS

在 TSQL 中,我将不同的行连接到一个单元格中:FOR xml path('') 我将下一个字符放在每一行之后以产生换行符。 + 字符 (13) + 字符 (10) SSRS 会生成换行符,但也会打印这些 CRLF 字符。 每行结尾:
 有解决办法吗?

你用一个简单的FOR XML PATH('')产生的XML(为了做类似STRING_AGG()的事情)将翻译任何禁止的字符(比如<, > and &等等) 对应的实体。一个实体是 &abc;,而 abc 代表一个字符(如 &lt;),或者您看到某种十六进制或 unicode 代码点。这是在创建 XML 隐式时完成的。从中读出一些东西 XML 将进行反转过程 - 再次隐式地进行。

但是:您的代码 没有 return 作为本机 XML 类型的结果

试试这个(最好将输出切换到 "text"):

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

returns

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)');

returns

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;