将多个 "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;

您也可以对此进行扩展以获取类型。但如果不是整个解决方案,这应该是一个很好的起点!