通过查询向多个收件人发送电子邮件的存储过程
Stored Procedure to Email multiple recipients from query
我创建了一个查询,以我需要的方式提取信息和电子邮件,然后将其呈现给我们的客户。我怎样才能把它变成一个由查询(查询 A)提供的存储过程?对于每组 cmp_code 和 cmp_e_mail,我需要它 运行 returns。因此,例如,如果 QueryA returns 以下内容,我需要分别为每个查询 运行 发送电子邮件查询。
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
尝试创建一个像下面这样的存储过程,它循环遍历 table,然后调用另一个传入数据的存储过程,确保在最后释放并关闭游标
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
我创建了一个查询,以我需要的方式提取信息和电子邮件,然后将其呈现给我们的客户。我怎样才能把它变成一个由查询(查询 A)提供的存储过程?对于每组 cmp_code 和 cmp_e_mail,我需要它 运行 returns。因此,例如,如果 QueryA returns 以下内容,我需要分别为每个查询 运行 发送电子邮件查询。
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
尝试创建一个像下面这样的存储过程,它循环遍历 table,然后调用另一个传入数据的存储过程,确保在最后释放并关闭游标
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