【发布时间】:2015-01-27 18:43:05
【问题描述】:
我正在尝试使用 Sql server 2012 中的存储过程发送邮件。
可以使用我编写的代码发送邮件。
我得到的输出
例如,如果我的表中有 5 行,那么每一行都被视为一封邮件。 我收到了 5 封邮件,包含 5 条不同的记录。
示例
邮件 1
EmpName: Abc
EmpId : 123
邮件 2
企业名称:xyz
EmpId : 456
邮件 3
企业名称:定义
EmpId : 789
等
实际要求
我希望在一封邮件中发送所有 5 行。
示例
邮件 1
EmpName: Abc
EmpId : 123
企业名称:xyz
EmpId : 456
企业名称:定义
EmpId : 789
等
这是我写的存储过程:
DECLARE
@out_desc VARCHAR(1000),
@out_mesg VARCHAR(10)
DECLARE @EmpName VARCHAR(20),
@LoginDate datetime,
@EmailId NVARCHAR(max),
@EmpID NVARCHAR(50),
@Salary NVARCHAR(50),
@MonthName NVARCHAR(50)
DECLARE @body NVARCHAR(1000)
DECLARE @subject NVARCHAR(500)
DECLARE C1 CURSOR READ_ONLY
FOR
select EmpName,EmpID,SUM(SalaryToBePaid) as Salary,
(select EmailId from EmailIds) as EmailId,
( SELECT DATENAME(MM, GETDATE())) as MonthName
from EmployeeSalary
where
LoginDate between DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -3) and GETDATE()
Group By
EmpName,EmpID
OPEN C1
FETCH NEXT FROM C1 INTO
@EmpName,@EmpID,@Salary,@EmailId,@MonthName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @body = '<b><U>Employees :</U></b><br />' +
'<br/><b>Employee Name : ' + @EmpName +
'<br/><b>Employee Id : ' + @EmpID +
+ '<br/><b>Salary : ' + @Salary
SET @subject = @MonthName + ' Month Salary Details'
EXEC sp_send_mail --sp_send_mail
'xxx@mail.com', --- add your Email Address here
'password', ----add your Password here
@EmailId,
@subject,
@body,
'htmlbody', @output_mesg = @out_mesg output, @output_desc = @out_desc output
PRINT @out_mesg
PRINT @out_desc
FETCH NEXT FROM C1 INTO
@EmpName, @EmpID, @Salary,@EmailId,@MonthName
END
CLOSE C1
DEALLOCATE C1
请帮帮我..
【问题讨论】:
-
sp_send_mail或sp_send_dbmail不适用于生成和发送报告。这就是 Reporting Services 的工作。它们旨在向管理员发送警报。格式化、收件人管理、调度几乎是不可能的。您使用了错误的工具来完成这项工作。
标签: sql-server sendmail