1

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

4

1 回答 1

2

您使用简单FOR XML PATH('')(为了执行类似的操作STRING_AGG())生成的 XML 会将任何禁止字符(例如<, > and &以及更多)转换为对应的实体。实体是&abc;, whileabc代表一个字符(如&lt;),或者您会看到某种十六进制或 unicode 代码点。这是在隐式创建 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;
于 2018-06-19T09:57:32.767 回答