在TSQL中,我将不同的行连接到一个单元格:FOR xml path('')
我在每一行后面放置下一个字符以生成换行符。
+ char(13)+ char(10)
SSRS确实会生成换行符,但也会打印这些CRLF字符。
每一行以:
结尾
有解决方案吗?
答案 0 :(得分:1)
使用简单FOR XML PATH('')
生成的XML(为了执行STRING_AGG()
之类的操作)会将任何禁用字符(例如<, > and &
等等)转换为对应实体。实体是&abc;
,而abc
代表一个字符(如<
),或者您看到某种十六进制或unicode代码点。这是在创建XML隐含时完成的。从这个XML中读取一些东西会再次隐式地进行反转过程。
但是:您的代码不会将结果作为原生XML类型返回。
试试这个(最好将输出切换为“text”):
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;