Запрос для извлечения всех путей из наборов расширений в SSRS

#sql-server #reporting-services

Вопрос:

Мне нужно извлечь список путей, которые находятся в поле ExtensionSettings таблицы подписок в SSRS. У кого-нибудь есть сценарий для этого?

Ответ №1:

Я нашел здесь хороший сценарий: http://www.andrewing.co.uk/parse-ssrs-subscriptions-table/

 WITH S AS (
   SELECT TOP 1000
     [SubscriptionID],
     ExtensionSettings = cast(ExtensionSettings as xml)
   FROM [ReportServer].[dbo].[Subscriptions]
)
SELECT
  S.SubscriptionID,
  TransmissionMethod = CASE
 ExtensionSettings.value('(/ParameterValues/ParameterValue/Name)[1]', 'varchar(50)')
        WHEN 'TO' THEN 'Email'
        WHEN 'PATH' THEN 'File Share'
        ELSE 'Unknown' END,
  FileSharePath = ExtensionSettings.query('
        for $parameter in /ParameterValues/ParameterValue
        let $name := $parameter/Name
        let $value := $parameter/Value
        where $name = "PATH"
        return data($value)'),
  FileName = ExtensionSettings.query('
        for $parameter in /ParameterValues/ParameterValue
        let $name := $parameter/Name
        let $value := $parameter/Value
        where $name = "FILENAME"
        return data($value)'),
  RenderFormat = ExtensionSettings.query('
        for $parameter in /ParameterValues/ParameterValue
        let $name := $parameter/Name
        let $value := $parameter/Value
        where $name = "RENDER_FORMAT" or $name = RenderFormat"
        return data($value)'),
  EmailSubject = ExtensionSettings.query('
        for $parameter in /ParameterValues/ParameterValue
        let $name := $parameter/Name
        let $value := $parameter/Value
        where $name = "Subject"
        return data($value)'),
  ExtensionSettings
FROM S
 

Комментарии:

1. Это может быть сделано с некоторой оптимизацией: например FileSharePath = ExtensionSettings.query('/ParameterValues/ParameterValue[Name[text() = "PATH"]]/Value/text() , и если вам нужно только одно значение из этого, то вы должны использовать .value вместо .query