将多个 "parameter" xml 节点值显示到报表服务器目录 table 的一行中
Show multiple "parameter" xml nodes values into one row from Report Server Catalog table
我使用以下 SQL 查询从 ReportServer 的 Catalog
table 获取参数。在此查询中,我尝试使用以下查询来显示一些值,但它显示一个值而不是原始参数数量:
USE ReportServer
GO
SELECT Name,
CAST(Parameter as xml) [Parameter_XML],
CONCAT(Convert(XML,Parameter).value('(//Parameters/Parameter/Name)[1]','nvarchar(MAX)'), ', [', Convert(XML,Parameter).value('(//Parameters/Parameter/Type)[1]','nvarchar(MAX)'), ']') as [Parameter_List]
FROM Catalog
我预期的最终结果是这样的:
Report Name
Parameter_XML
Parameter_List
My New Report with Parameters
XML goes here
Report_Name [DateTime], ReportDate [DateTime], etc...
如何将多个参数 XML 节点值放在一行中?
有一种方法可以做到这一点:
您只需阅读每个报告的节点,然后使用 XML 的内容创建逗号分隔列表。
USE ReportServer
GO
; with mycte as (
SELECT Name,
CAST(Parameter as xml) [Parameter_XML]
FROM Catalog
where Parameter is not null
)
, mycte2 as (
SELECT Name, T2.x.value('(Name)[1]', 'varchar(100)') as parameter_list
FROM mycte
CROSS APPLY [Parameter_XML].nodes('//Parameters/Parameter') as T2(x)
)
SELECT DISTINCT
Name as report_name,
STUFF(
(
SELECT ', ' + parameter_list
FROM mycte2 A1
WHERE A1.Name = A2.Name FOR XML PATH('')
), 1, 1, '') AS report_parameters
FROM mycte2 A2;
您也可以对此进行扩展以获取类型。但如果不是整个解决方案,这应该是一个很好的起点!
我使用以下 SQL 查询从 ReportServer 的 Catalog
table 获取参数。在此查询中,我尝试使用以下查询来显示一些值,但它显示一个值而不是原始参数数量:
USE ReportServer
GO
SELECT Name,
CAST(Parameter as xml) [Parameter_XML],
CONCAT(Convert(XML,Parameter).value('(//Parameters/Parameter/Name)[1]','nvarchar(MAX)'), ', [', Convert(XML,Parameter).value('(//Parameters/Parameter/Type)[1]','nvarchar(MAX)'), ']') as [Parameter_List]
FROM Catalog
我预期的最终结果是这样的:
Report Name | Parameter_XML | Parameter_List |
---|---|---|
My New Report with Parameters | XML goes here | Report_Name [DateTime], ReportDate [DateTime], etc... |
如何将多个参数 XML 节点值放在一行中?
有一种方法可以做到这一点:
您只需阅读每个报告的节点,然后使用 XML 的内容创建逗号分隔列表。
USE ReportServer
GO
; with mycte as (
SELECT Name,
CAST(Parameter as xml) [Parameter_XML]
FROM Catalog
where Parameter is not null
)
, mycte2 as (
SELECT Name, T2.x.value('(Name)[1]', 'varchar(100)') as parameter_list
FROM mycte
CROSS APPLY [Parameter_XML].nodes('//Parameters/Parameter') as T2(x)
)
SELECT DISTINCT
Name as report_name,
STUFF(
(
SELECT ', ' + parameter_list
FROM mycte2 A1
WHERE A1.Name = A2.Name FOR XML PATH('')
), 1, 1, '') AS report_parameters
FROM mycte2 A2;
您也可以对此进行扩展以获取类型。但如果不是整个解决方案,这应该是一个很好的起点!