我正在尝试使用Sql server 2012中的存储过程发送邮件。
可以使用我编写的代码发送邮件。
输出我
例如,如果我的表中有5行,那么每行都被视为一封邮件。 我收到5封不同记录的邮件。
例如
邮件1
EmpName:Abc
EmpId:123
邮件2
EmpName:xyz
EmpId:456
邮件3
EmpName:def
EmpId:789
等
实际要求
我希望通过一封邮件发送所有5行。
示例
邮件1
EmpName:Abc
EmpId:123
EmpName:xyz
EmpId:456
EmpName:def
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
请帮帮我..
答案 0 :(得分:0)
删除游标。简单使用SELECT RATHER CURSOR。那会给你带来好结果。
以下是一个例子,用你自己的替换
DECLARE @bodyMsg nvarchar(max)
DECLARE @subject nvarchar(max)
DECLARE @tableHTML nvarchar(max)
SET @subject = 'Query Results in HTML with CSS'
SET @tableHTML = N'<table id="box-table" >' +
N'<tr><font color="Green"><th>SpecialOfferID</th>
<th>Description</th>
<th>Type</th>
<th>Category</th>
<th>StartDate</th>
<th>EndDate</th>
</tr>' +
CAST ( (
SELECT td = CAST([SpecialOfferID] AS VARCHAR(100)),'',
td = [Description],'',
td = [Type],'',
td = [Category] ,'',
td = CONVERT(VARCHAR(30),[StartDate],120) ,'',
td = CONVERT(VARCHAR(30),[EndDate],120)
FROM [AdventureWorks].[Sales].[SpecialOffer]
ORDER BY [SpecialOfferID]
FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) +
N'</table>'