Мне нужно получить список параметров для конкретного отчета SSRS и показать все возможные выпадающие элементы (вместе с именем параметра Report, DataType и Prompt).
Я не уверен в других вариантах (если они есть). Запрос возвращает именно то, что мне нужно, он занимает слишком много времени, чтобы быть полезным (10-12 секунд). Есть ли другой способ получить эти результаты или сделать этот быстрее?
USE ReportServer
DECLARE @dbname VARCHAR(25)
SET @dbname='DBName'
DECLARE @rptlistStr VARCHAR(MAX)
DECLARE @reportlist table ( path varchar(500), name varchar(500) )
insert into @reportlist
exec [ADA Master].[dbo].[spGetAdminReports] @dbname
set @rptlistStr = substring((SELECT ( ', ' + Name ) FROM @reportlist WHERE NAME = 'rptReport'
FOR XML PATH( '' )
), 3, 1000 )
SELECT NAME, PATH,
y.r.query ('for $s in *:ParameterValue/*:Value return concat(data($s),"|")') [DropDownItemValue]
, y.r.query ('for $s in *:ParameterValue/*:Label return concat(data($s),"|")') [DropDownItemLabel]
, x.r.value ('@Name', 'VARCHAR(100)') AS ReportParameterName
, x.r.value ('*:DataType[1]', 'VARCHAR(100)') AS DataType
, x.r.value ('*:AllowBlank[1]', 'VARCHAR(50)') AS AllowBlank
, x.r.value ('*:Prompt[1]', 'VARCHAR(100)') AS Prompt
, x.r.value ('*:Hidden[1]', 'VARCHAR(100)') AS Hidden
, x.r.value ('*:MultiValue[1]', 'VARCHAR(100)') AS MultiValue
FROM (
SELECT PATH
, NAME
, CAST(CAST(content AS VARBINARY(MAX)) AS XML) AS ReportXML
FROM ReportServer.dbo.Catalog
join master.dbo.ufn_SplitStringArray(@rptlistStr,',') a on NAME COLLATE DATABASE_DEFAULT = a.Item COLLATE DATABASE_DEFAULT
WHERE CONTENT IS NOT NULL AND TYPE = 2
) C
CROSS APPLY C.ReportXML.nodes('*:Report/*:ReportParameters/*:ReportParameter') x(r)
OUTER APPLY x.r.nodes('*:ValidValues/*:ParameterValues') y(r)
where x.r.value ('*:Prompt[1]', 'VARCHAR(100)') is not null