【问题标题】:Sending email from SSRS repor 2008从 SSRS 报告 2008 发送电子邮件
【发布时间】:2019-04-17 13:24:49
【问题描述】:

我在 SSRS 2008 报告中有以下供应商数据。

ID    Name    Details    Email
1     abc      d1       rob.b@gmail.com
2     def      d2       pat@gmail.com
3     ghi      d3       golf@gmail.com
4     dft      d4       rob.b@gmail.com 

我需要将相关详细信息发送到每个电子邮件 ID。比如上面的数据,我需要把ID为1和4的整个记录​​发给rob.b@gmail.com。 有什么方法可以将相关详细信息发送到报告中给出的电子邮件中。有人可以请教。

【问题讨论】:

    标签: email reporting-services ssrs-2008 send


    【解决方案1】:

    - 如果您拥有 SQL Server 企业版,您可以在 SSRS 中使用数据驱动订阅来执行此操作。

    如果您没有企业版,您仍然可以使用计划的存储过程来模拟数据驱动订阅,但需要付出更多努力。

    无论哪种方式,您都会有一个使用参数来识别单个记录的报告。然后,单独的数据驱动部分将有一个不同的查询,该查询获取报告所需的 ID 列表以及将其发送到的电子邮件地址。然后,数据驱动部分将为您在报告中创建的每个 ID 参数生成一个单独的报告,然后将它们发送到该地址。

    数据驱动订阅属性:

    不幸的是,这两种方法的主题太大,无法在答案中涵盖。

    MSDN - Data Driven Subscriptions

    MSSQLTips.com - simulate-reporting-services-data-driven-subscriptions

    这是我为生成多封电子邮件而制作的 SP:

    ALTER PROCEDURE [dbo].[RECORD_REVIEW_GENERATION]
    
    AS
    DECLARE @SUBSCRIPTION_ID AS VARCHAR(100) = (SELECT SETTING_VALUE FROM WORKING_STORAGE.dbo.SETTINGS WHERE SETTING_NAME = 'REVIEW_SUBSCRIPTION')
    DECLARE @SUBJECT VARCHAR(200) 
    DECLARE @COMMENT VARCHAR(500) 
    DECLARE @REVIEW_ID VARCHAR(50) 
    DECLARE @EXTENSION_SETTINGS XML
    DECLARE @PARAMETERS XML
    DECLARE @RECORD_ID AS INT 
    DECLARE @MAX_RECORD_ID AS INT 
    DECLARE @END_DATE AS DATE = GETDATE() - DATEPART(WEEKDAY, GETDATE())    --PREVIOUS SUNDAY
    DECLARE @START_DATE AS DATE = DATEADD(DAY, -6, @END_DATE)   --PREVIOUS MONDAY
    DECLARE @DATE VARCHAR(500) = CONVERT(VARCHAR(8), @END_DATE, 112)
    
    
    
    SELECT @EXTENSION_SETTINGS = ExtensionSettings, @PARAMETERS = [Parameters]
    FROM ReportServer.dbo.Subscriptions
    WHERE SubscriptionID = @SUBSCRIPTION_ID;
    
    
    
    IF OBJECT_ID('tempdb..#REVIEWS') IS NOT NULL DROP TABLE #REVIEWS 
    
    CREATE TABLE #REVIEWS(ReviewID VARCHAR(50), ProviderName VARCHAR(250), SiteIDNo VARCHAR(20), 
                            ReviewDate VARCHAR(12), UserName VARCHAR(250), VisitPurpose VARCHAR(250), 
                            NoOfPhysicians INT, NoOfRecords INT, RECORD_ID INT IDENTITY(1,1)
                        )
    INSERT INTO #REVIEWS(ReviewID, ProviderName, SiteIDNo, ReviewDate, UserName, VisitPurpose, NoOfPhysicians, NoOfRecords)
    SELECT ReviewID, ProviderName, SiteIDNo, ReviewDate, UserFirstName + ' ' + UserLastName AS UserName, VisitPurpose, NoOfPhysicians, NoOfRecords 
    FROM KHSSQLODSPRD.QI_SITE_REVIEW.dbo.RecordHeader 
    WHERE ExportDate BETWEEN @START_DATE AND @END_DATE
    ORDER BY ReviewDate
    
    
    SET @RECORD_ID = 1
    SET @MAX_RECORD_ID = (SELECT ISNULL(MAX(RECORD_ID), 0) FROM #REVIEWS)
    
    
        WHILE @RECORD_ID <= @MAX_RECORD_ID 
        BEGIN
    
            SELECT @REVIEW_ID = ReviewID, 
                    @SUBJECT = 'Review - ' + ProviderName, 
                    @COMMENT = CAST(@RECORD_ID AS VARCHAR(10)) + ' of ' + CAST(@MAX_RECORD_ID AS VARCHAR(10)) 
                                + ' Review Surveys for the week ending ' + RTRIM(CONVERT(VARCHAR(12), @END_DATE, 110)) + '.' 
                                + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) + ProviderName + ' [' + SiteIDNo + '] - Reviewed ' + RTRIM(CONVERT(VARCHAR(12), ReviewDate, 110)) 
                                + '. Review ID ' + ReviewID  
                                + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) + VisitPurpose + ' visit for ' + CAST(CAST(NoOfPhysicians AS INT) AS VARCHAR(20)) + ' physicians with ' 
                                +  CAST(CAST(NoOfRecords AS INT) AS VARCHAR(20)) + ' records by ' + UserName + '.'
            FROM #REVIEWS 
            WHERE RECORD_ID = @RECORD_ID
    
    
            SET @REVIEW_ID = LOWER(@REVIEW_ID)  
    
            --SET EXTENSION OPTIONS
            SET @EXTENSION_SETTINGS.modify('replace value of (/ParameterValues/ParameterValue[Name="Subject"]/Value/text())[1] with sql:variable("@SUBJECT")');
            SET @EXTENSION_SETTINGS.modify('replace value of (/ParameterValues/ParameterValue[Name="Comment"]/Value/text())[1] with sql:variable("@COMMENT")');
    
            --SET REPORT PARAMETERS
            SET @PARAMETERS.modify('replace value of (/ParameterValues/ParameterValue[Name="SITE_ID"]/Value/text())[1] with sql:variable("@REVIEW_ID")');
    
    
            --UPDATE SUBSCRIPTION PARAMETERS 
            UPDATE dbo.Subscriptions
            SET ExtensionSettings = CAST(@EXTENSION_SETTINGS AS VARCHAR(8000)), 
                [Parameters]      = CAST(@PARAMETERS AS VARCHAR(8000))
            WHERE SubscriptionID = @SUBSCRIPTION_ID
    
    
            EXEC dbo.AddEvent @EventType = 'TimedSubscription', @EventData = @SUBSCRIPTION_ID;
    
    
            --WAIT WHILE REPORT GENERATES 
            WAITFOR DELAY '00:00:03.000';
    
            --IF REPORT IS STILL EXECUTING, WAIT SOME MORE
            WHILE EXISTS (SELECT TOP 1 'X' FROM dbo.Event WHERE EventData = @SUBSCRIPTION_ID ) OR EXISTS (SELECT TOP 1 'X' FROM dbo.Notifications WHERE SubscriptionID = @SUBSCRIPTION_ID)
                            BEGIN
                                WAITFOR DELAY '00:00:01.000';
                                PRINT 'Waiting for subscription to finish'
                            END
    
    
            SET @RECORD_ID = @RECORD_ID + 1
    
        END  --END OF LOOP 
    
    --      SET @FLAG = 1
    

    您添加收件人地址的方式与更新 评论 的方式相同。 @Review_ID 作为参数传递给报告。

    【讨论】:

    • 非常感谢 Hannover Fist 的回复。我用的是2008标准版。我在属性中看不到与上图相同的东西。我尝试在第 3 步中给出参数中包含电子邮件 ID 的查询,但它给出了错误,您尝试对项目进行的操作对于它的类型是不允许的。抱歉,我是第一次使用此功能。
    • 仍然遇到同样的错误。你能帮忙吗?谢谢。
    • 标准版没有“数据驱动订阅”选项,因此您无法使用查询进行设置。我展示的是 2016 年,因此它与您的 2008 年报告管理器不同。您是否尝试分配 TO 值以使用您的电子邮件地址? SET @EXTENSION_SETTINGS.modify('replace value of (/ParameterValues/ParameterValue[Name="TO"]/Value/text())[1] with sql:variable("@emailaddress")');
    • 我应该在哪里给出上面的代码?如果我提供上述代码,它会在 SSRS 2008 标准版中工作吗?抱歉问问题,因为我是新手,还没有使用过这个功能。之前..谢谢你的时间。
    • 抱歉,刚刚发现我用的是企业版。你能告诉我在企业版中我在哪里使用上述代码>谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    相关资源
    最近更新 更多