在 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
代表一个字符(如 <
),或者您看到某种十六进制或 unicode 代码点。这是在创建 XML 隐式时完成的。从中读出一些东西 XML 将进行反转过程 - 再次隐式地进行。
但是:您的代码 没有 return 作为本机 XML 类型的结果 。
试试这个(最好将输出切换到 "text"):
SELECT TOP 5 o.[name] + CHAR(13) + CHAR(10)
FROM sys.objects o
FOR XML PATH('')
returns
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)');
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;
在 TSQL 中,我将不同的行连接到一个单元格中:FOR xml path('')
我将下一个字符放在每一行之后以产生换行符。
+ 字符 (13) + 字符 (10)
SSRS 会生成换行符,但也会打印这些 CRLF 字符。
每行结尾:
有解决办法吗?
你用一个简单的FOR XML PATH('')
产生的XML(为了做类似STRING_AGG()
的事情)将翻译任何禁止的字符(比如<, > and &
等等) 对应的实体。一个实体是 &abc;
,而 abc
代表一个字符(如 <
),或者您看到某种十六进制或 unicode 代码点。这是在创建 XML 隐式时完成的。从中读出一些东西 XML 将进行反转过程 - 再次隐式地进行。
但是:您的代码 没有 return 作为本机 XML 类型的结果 。
试试这个(最好将输出切换到 "text"):
SELECT TOP 5 o.[name] + CHAR(13) + CHAR(10)
FROM sys.objects o
FOR XML PATH('')
returns
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)');
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;