我正在尝试将无效代码发送到邮件。但是,当我执行存储过程的作业时,它已完成,并且没有发送任何电子邮件。当我单独执行查询时,我得到了结果。我错过了任何配置设置吗?
CREATE PROCEDURE sp_Send_Email_Invalid_code
@MONTH AS int = 0
AS
BEGIN
DECLARE @Email_Subject AS nvarchar(250) = 'Codes Missing in master table';
DECLARE @Email_Receipients_To AS nvarchar(max) = 'xxx.yyy.com';
DECLARE @IsUseEmailConfig AS bit = 1;
DECLARE @Email_Category AS nvarchar(250);
SET @IsUseEmailConfig = 0
SET @Email_Category = 'Codes Missing in master table'
SELECT DISTINCT CODE
INTO #temp_1
FROM tblRegCode nolock
SELECT
*
FROM
#temp_1
DECLARE @Query nvarchar(max);
SET @Query = 'SELECT * FROM #temp_1';
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'psmEmailer',
@recipients = 'xxx.yyy.com',
@query = @Query,
@subject = 'Missing codes',
@attach_query_result_as_file = 1 ;
DROP TABLE #temp_1;
END
我的SQL Server代理作业是
DECLARE @MONTH AS int = 0
DECLARE @dt datetime = GETDATE()
SET @MONTH = DATEPART(mm, DATEADD(mm, -1, @dt))
EXEC sp_Send_Email_Invalid_code @MONTH
答案 0 :(得分:1)
所以,你可以通过你的SP制作:
CREATE PROCEDURE sp_Send_Email_Invalid_code
@MONTH AS int
AS
BEGIN
DECLARE @Query nvarchar(max) = 'SELECT [CODE ] FROM tblRegCode nolock';
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'psmEmailer',
@recipients = 'xxx.yyy.com',
@query = @Query,
@subject = 'Codes Missing in master table',
@attach_query_result_as_file = 1 ;
END
GO
在SP中你没有使用@MONTH
,为什么?
尝试在SP中添加WITH EXECUTE AS OWNER
,然后通过作业运行。
答案 1 :(得分:1)
这很难回答,因为上面的代码中没有任何明显的问题可以解决问题。因此问题必须在哪里。我的想法是1)你的查询结果集没有返回任何东西。 2)您的电子邮件配置正确,这意味着无法发送电子邮件。
对于数字1,我们无法在不检查您的数据的情况下解决此问题,因此请继续。
对于数字2,尝试单独使用发送邮件过程从SQL实例发送简单的电子邮件。像这样:
EXEC msdb.dbo.sp_send_dbmail
@recipients = 'you@somewhere.com',
@subject = 'Send Mail Test',
@body = 'Testing',
@body_format = 'HTML';
然后,您没有收到电子邮件,请使用以下查询检查MSDB中的故障日志。
USE [msdb]
GO
SELECT
l.[description] AS 'Error failure',
f.[recipients],
f.[subject],
f.[sent_date],
f.[body],
f.[body_format]
FROM
[dbo].sysmail_faileditems f
JOIN [dbo].sysmail_event_log l
ON f.[mailitem_id] = l.[mailitem_id]
ORDER BY
f.[sent_date] DESC
如果您收到了测试电子邮件,我建议问题在于您尝试附加的查询结果。
只是另一个想法。您可能还需要使用参数 @execute_query_database 和 @query_attachment_filename 。
查看https://msdn.microsoft.com/en-us/library/ms190307.aspx了解详情。