在 TSQL 中,我将不同的行连接到一个单元格: FOR xml path('') 我将下一个字符放在每一行之后以生成换行符。+ char(13) + char(10) SSRS 会生成换行符,但也会打印这些 CRLF 字符。每一行都以:
有解决方案吗?
问问题
110 次
1 回答
2
您使用简单FOR XML PATH('')
(为了执行类似的操作STRING_AGG()
)生成的 XML 会将任何禁止字符(例如<, > and &
以及更多)转换为对应的实体。实体是&abc;
, whileabc
代表一个字符(如<
),或者您会看到某种十六进制或 unicode 代码点。这是在隐式创建 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;
于 2018-06-19T09:57:32.767 回答