2013-09-23 3 views
10

Я написал отчет SSRS, чтобы помочь отслеживать подписки на SSRS. Я перепрограммировал скрипт, который будет использовать Reporterver.dbo.Subscriptions.LastStatus для просмотра получателей электронной почты, однако он будет перечислять только первые 520 символов LastStatus. Поскольку некоторые из наших списков рассылки довольно велики, некоторые имена, которые ищет мой скрипт, не найдены (хотя они и являются частью дистрибутива). Ниже приведен сценарий, который я использую:Подписки SSRS - Как просмотреть ВСЕ получателей отчетов

SELECT Reportname = c.Name 
    ,FileLocation = c.Path 
    ,SubscriptionDesc=su.Description 
    ,Subscriptiontype=su.EventType 
    ,su.LastStatus 
    ,su.LastRunTime 
    ,Schedulename=sch.Name 
    ,ScheduleType = sch.EventType 
    ,ScheduleFrequency = 
    CASE sch.RecurrenceType 
    WHEN 1 THEN 'Once' 
    WHEN 2 THEN 'Hourly' 
    WHEN 4 THEN 'Daily/Weekly' 
    WHEN 5 THEN 'Monthly' 
    END 
    ,su.Parameters 
    FROM Reportserver.dbo.Subscriptions su 
    JOIN Reportserver.dbo.Catalog c 
    ON su.Report_OID = c.ItemID 
    JOIN Reportserver.dbo.ReportSchedule rsc 
    ON rsc.ReportID = c.ItemID 
    AND rsc.SubscriptionID = su.SubscriptionID 
    JOIN Reportserver.dbo.Schedule Sch 
    ON rsc.ScheduleID = sch.ScheduleID 
WHERE LastStatus like @Email 
ORDER BY LastRunTime DESC 

Любой код, который я нашел в Интернете использует столбец LastStatus для отображения этих данных. Если у кого-нибудь есть предложения относительно более полного способа, чтобы я перечислял всех членов списка распространения отчетов, я был бы признателен.

ответ

26

Ниже SQL запрашивает полный текст параметров подписки. Я думаю, что это будет работать с чрезвычайно длинными списками адресов, но у меня нет тестового сервера с длинными списками адресов, доступных прямо сейчас.

Если вы используете это в производстве, я бы, вероятно, выбрал пару WITH (NOLOCK) и не ожидал поддержки от MS проблем.

; 
    WITH subscriptionXmL 
      AS (
       SELECT 
       SubscriptionID , 
       OwnerID , 
       Report_OID , 
       Locale , 
       InactiveFlags , 
       ExtensionSettings , 
       CONVERT(XML, ExtensionSettings) AS ExtensionSettingsXML , 
       ModifiedByID , 
       ModifiedDate , 
       Description , 
       LastStatus , 
       EventType , 
       MatchData , 
       LastRunTime , 
       Parameters , 
       DeliveryExtension , 
       Version 
       FROM 
       ReportServer.dbo.Subscriptions 
      ), 
       -- Get the settings as pairs 
     SettingsCTE 
      AS (
       SELECT 
       SubscriptionID , 
       ExtensionSettings , 
    -- include other fields if you need them. 
       ISNULL(Settings.value('(./*:Name/text())[1]', 'nvarchar(1024)'), 
         'Value') AS SettingName , 
       Settings.value('(./*:Value/text())[1]', 'nvarchar(max)') AS SettingValue 
       FROM 
       subscriptionXmL 
       CROSS APPLY subscriptionXmL.ExtensionSettingsXML.nodes('//*:ParameterValue') Queries (Settings) 
      ) 
    SELECT 
     * 
    FROM 
     SettingsCTE 
    WHERE 
     settingName IN ('TO', 'CC', 'BCC') 
+0

Это именно то, что я искал! Возможность поиска как TO, так и CC идеально подходит, потому что я надеялся исправить эту часть отчета. Очень красивый скрипт! Спасибо за вашу помощь. Jamie – Wendy

+0

Это потрясающе. Однако, как обновить адрес электронной почты в массовом порядке? Вариант использования - бывший сотрудник помещает адрес электронной почты своей компании в отчет. –

Смежные вопросы