我使用以下 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
我預期的最終結果是這樣的:
| 報告名稱 | 引數_XML | Parameter_List |
|---|---|---|
| 我的帶引數的新報表 | XML 在這里 | Report_Name [DateTime]、ReportDate [DateTime] 等... |
如何將多個引數 XML 節點值放在一行中?
uj5u.com熱心網友回復:
有一種方法可以做到這一點:
您只需閱讀每個報告的節點,然后使用 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;
您也可以對此進行擴展以獲取型別。但如果不是整個解決方案,這應該是一個很好的起點!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/432428.html
標籤:sql服务器 报告服务 sql-server-2016
上一篇:按日期查找活躍客戶
下一篇:在高流量請求期間防止超額預訂
