显示多个“参数”将 xml 节点值合并到报表服务器目录表的一行中

发布于 2025-01-09 11:49:19 字数 764 浏览 2 评论 0原文

我使用以下 SQL 查询从 ReportServer 的 Catalog 表中获取参数。在此查询中,我尝试使用以下查询来显示一些值,但它显示一个值而不是原始参数数量:

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 NameParameter_XMLParameter_List
My New Report withParameters此处为 XMLReport_Name [DateTime]、ReportDate [DateTime] 等...

如何将多个参数 XML 节点值放入一行?

I used the following SQL query to get the parameters from the ReportServer's Catalog table. In this query, I tried to use the following query to bring up some values, but it shows one value instead of the original number of parameters:

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

My expected end result would be like this:

Report NameParameter_XMLParameter_List
My New Report with ParametersXML goes hereReport_Name [DateTime], ReportDate [DateTime], etc...

How can I bring multiple parameter XML node values into one row?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

来日方长 2025-01-16 11:49:19

有一种方法可以做到这一点:

您只需读取每个报告的节点,然后使用 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;

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

There is a way to do this:

You simply read the nodes of each report, then use stuff for XML to create a comma seperated list.

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;

You can expand on this to get the types as well. But this should be a good starting point if not the whole solution!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文