【问题标题】:Stored Procedure to Email multiple recipients from query从查询中向多个收件人发送电子邮件的存储过程
【发布时间】:2015-06-07 10:58:11
【问题描述】:

我创建了一个查询,该查询以我需要的方式提取信息和电子邮件以呈现给我们的客户。如何将其转换为由查询(查询 A)提供的存储过程?我需要它为它返回的每组独特的 cmp_code 和 cmp_e_mail 运行。因此,例如,如果 QueryA 返回以下内容,我需要为每个人单独运行电子邮件查询。

C0001 email1@asdf.com
C0002 email2@asdf.com
C0003 email3@asdf.com

查询A:

SELECT DISTINCT 
       [cmp_code]
      ,[cmp_e_mail]
  FROM Table1

查询到电子邮件:

DECLARE @email nvarchar(50)
DECLARE @cmp_code nvarchar (5)
DECLARE @profile nvarchar(50)
DECLARE @subject nvarchar(100)
DECLARE @querystr nvarchar (MAX)

set @email = QueryA.[cmp_e_mail]
set @cmp_code = QueryA.[cmp_code]
set @profile = 'Reports'
set @subject  =  'Test'+@cmp_code
set @querystr = 'SELECT  [Year],[Week],[DueDate]
  FROM Table1
  WHERE [cmp_code] = '''+@cmp_code+'''';


EXEC msdb.dbo.sp_send_dbmail
@profile_name = @profile,
@recipients = @email,
@subject = @subject,
@body = 'This message is to inform you that we have not received your financial report for the following weeks. 
Please remit as soon as possible and pay by the due date listed.', 
@query = @querystr

【问题讨论】:

    标签: tsql stored-procedures sql-server-2008-r2


    【解决方案1】:

    尝试创建一个像下面这样的存储过程,循环遍历表,然后调用另一个传入数据的存储过程,一定要在最后释放并关闭游标

    Declare @Code nvarchar(50)
    Declare @EmailAddress nvarchar(Max)  
    Declare dbCurSP Cursor
    
    For SELECT DISTINCT  [cmp_code]  FROM Table1
    
    Open dbCurSP
    
    Fetch Next From dbCurSP Into @Code
    
    While @@fetch_status = 0
    
    Begin 
         -- find email address
         SELECT @EmailAddress= [cmp_e_mail] FROM Table1 where [cmp_code]=@Code
    
         execute SP_SendEmail @EmailAddress, @Code
    
        Fetch Next From dbCurSP Into @Code
    End
    
    Close dbCurSP
    Deallocate dbCurSP
    

    【讨论】:

    • 创建 2 个存储过程比只创建一个有什么优势?
    • 我不认为有什么优势真的可能只是我必须保持整洁的习惯
    猜你喜欢
    • 1970-01-01
    • 2012-05-18
    • 2013-10-30
    • 1970-01-01
    • 2017-12-05
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多