0

@HourDifference我有一个 T-SQL 存储过程(它返回一个称为输出参数的单个标量值);你可以看到下面的执行:

DECLARE @HourDifference_output TINYINT;

-- I declare a variable to capture the output parameter--

EXEC dbo.sproc_XYZ_Notification
         @HourDifference = @HourDifference_output OUTPUT;

SELECT @HourDifference_output AS HourDifferenceCaptured

我有以下要求:

  1. 如果HourDifferenceCaptured > 12,我需要发送电子邮件

  2. 如果HourDifferenceCaptured <= 12,则不需要发送电子邮件;什么都不需要做。

我需要有两个时间表,一个在早上 7 点,另一个在晚上 7 点在 SQL Server 代理中。

有人可以提供代码并指导我完成此过程吗?

4

2 回答 2

0
USE <database_name>
GO
DECLARE   @subject  NVARCHAR(max) = 'Email subject'
        , @body     NVARCHAR(MAX)

DECLARE @HourDifference_output TINYINT;
EXEC dbo.sproc_XYZ_Notification @HourDifference = @HourDifference_output OUTPUT;
SELECT @HourDifference_output AS HourDifferenceCaptured

IF (@HourDifference_output> 12) 
BEGIN

SET @body = '<!DOCTYPE html>
                        <html>
                        <body>
                        <body style="color:black;  font-family:Times New Roman; font-size:14x"> .......... body text ......... </body>
                        <body style="color:SlateGray; font-family:Times New Roman; font-size:14px;line-height: 1;">  ------------------------------------------------------------------' + ' 
                        <body style="color:SlateGray; font-family:Times New Roman; font-size:14px;line-height: 1;">  ------------------------------------------------------------------' + '                                                             
                        </body>
             </HTML>'

    EXEC msdb.dbo.sp_send_dbmail   @profile_name = 'Profile name'
                                ,  @recipients = 'distibution email'
                                ,  @body = @body
                                ,  @body_format = 'HTML'
                                ,  @subject = @subject
END
GO
于 2019-12-09T21:41:32.727 回答
0

您可以创建一个 SQL Server 代理作业,并在需要时使用msdb.dbo.sp_send_dbmail用于发送电子邮件的 t-sql 步骤(请参阅此处,以获取存储过程的完整参考)。

尝试类似以下的操作:

DECLARE @HourDifference_output TINYINT;

EXEC dbo.sproc_XYZ_Notification @HourDifference_output OUTPUT;

-- SELECT @HourDifference_output AS HourDifferenceCaptured

IF @HourDifference_output > 12
BEGIN
   EXEC msdb.dbo.sp_send_dbmail  
        @profile_name = 'db_mail_profile_i_have_already_created',  
        @recipients = 'intended-recipients@yourorganization.com',  
        @body = 'Too many hours difference.',  
        @subject = 'Automated Message' ; 
END

您必须已经配置了数据库邮件帐户数据库邮件配置文件并授予运行作业步骤的用户适当的访问权限。第二个链接还包含用于创建数据库邮件帐户和配置文件的示例脚本,将帐户添加到配置文件并适当地授予访问权限(我个人更喜欢通过 SSMS 数据库邮件向导配置数据库邮件)。

要做出的决定是创建公共或私人档案。您可以在此处找到有关差异的更多信息。

最后,在我看来,当作业/步骤失败时通知管理员(通过 SQL Server 代理内置机制)是一种很好的做法。

于 2019-12-09T22:14:48.910 回答