2013-09-23 43 views
10

Tôi đã viết báo cáo SSRS để giúp tôi theo dõi đăng ký SSRS. Tôi đã thay đổi một kịch bản mà sẽ sử dụng Reportserver.dbo.Subscriptions.LastStatus để xem người nhận email, tuy nhiên, nó sẽ chỉ liệt kê 520 ký tự đầu tiên của LastStatus. Bởi vì một số danh sách phân phối của chúng tôi khá lớn, một số tên mà tập lệnh tìm kiếm của tôi không được tìm thấy (mặc dù chúng là một phần của phân phối). Bên dưới là tập lệnh tôi đang sử dụng:Đăng ký SSRS - Cách xem TẤT CẢ người nhận báo cáo

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 

Bất kỳ mã nào mà tôi đã tìm thấy trực tuyến đều sử dụng cột LastStatus để hiển thị dữ liệu này. Nếu bất cứ ai có bất cứ đề xuất nào cho một cách hoàn chỉnh hơn cho tôi để liệt kê tất cả các thành viên của danh sách phân phối báo cáo, tôi sẽ đánh giá cao nó.

Trả lời

26

Dưới đây là SQL để truy vấn toàn bộ thông số đăng ký. Tôi nghĩ rằng điều này sẽ làm việc với danh sách địa chỉ rất dài, nhưng tôi không có một máy chủ thử nghiệm với danh sách địa chỉ dài có sẵn ngay bây giờ.

Nếu sử dụng tính năng này trong sản xuất, có lẽ tôi sẽ ném vào một số WITH (NOLOCK) và không mong đợi sự hỗ trợ từ MS về các sự cố.

; 
    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

Đó chính xác là những gì tôi đang tìm kiếm! Khả năng tìm kiếm cả TO và CC là hoàn hảo, bởi vì tôi đã hy vọng sửa phần đó của báo cáo tiếp theo. Kịch bản rất hay! Cảm ơn sự giúp đỡ của bạn Jamie – Wendy

+0

Điều này hoàn toàn tuyệt vời. Tuy nhiên, làm cách nào để cập nhật địa chỉ e-mail? Trường hợp sử dụng là một nhân viên cũ đặt địa chỉ email công ty của họ trong báo cáo. –