2013-09-23 5 views
10

Ho scritto un rapporto SSRS per aiutarmi a tenere traccia degli abbonamenti SSRS. Ho riorganizzato uno script che utilizzerà Reportserver.dbo.Subscriptions.LastStatus per visualizzare i destinatari delle e-mail, tuttavia elencherà solo i primi 520 caratteri di LastStatus. Poiché alcune delle nostre liste di distribuzione sono piuttosto grandi, alcuni dei nomi cercati dal mio script non vengono trovati (anche se fanno parte della distribuzione). Qui di seguito è lo script che sto usando:Sottoscrizioni SSRS - Come visualizzare TUTTI i destinatari del report

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 

Qualsiasi codice che ho trovato utilizza la colonna laststatus per visualizzare questi dati on-line. Se qualcuno ha qualche suggerimento su un modo più completo per elencare tutti i membri della lista di distribuzione del rapporto, lo apprezzerei.

risposta

26

Di seguito è riportato l'interrogazione SQL per il testo completo dei parametri di abbonamento. Penso che funzionerà con elenchi di indirizzi estremamente lunghi, ma non ho un server di prova con elenchi di indirizzi lunghi disponibili al momento.

Se si utilizza questo in produzione, probabilmente inserirò un paio di WITH (NOLOCK) e non mi aspetto un supporto da MS sui problemi.

; 
    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

Era esattamente quello che stavo cercando! La possibilità di cercare sia il TO che il CC è perfetta, perché speravo di correggere quella parte del rapporto in seguito. Sceneggiatura molto bella! Grazie per il tuo aiuto Jamie – Wendy

+0

Questo è assolutamente fantastico. Come faccio ad aggiornare un indirizzo e-mail in massa, però? Il caso d'uso è un ex dipendente che ha inserito il proprio indirizzo email aziendale nel report. –

Problemi correlati