在实际应用中,我们经常需要对数据库中的数据进行监控,当数据发生更改时,自动发送邮件通知相关人员,本文将介绍如何在 SQL Server 中实现这一功能。
准备工作
1、安装 SQL Server Management Studio(SSMS):用于连接 SQL Server 数据库,执行 SQL 语句。
2、安装 SQL Server Integration Services(SSIS):用于创建和配置数据触发器。
3、安装邮件服务器:用于发送邮件通知。
创建数据触发器
1、打开 SQL Server Management Studio,连接到目标数据库。
2、在“对象资源管理器”中,右键单击目标表,选择“管理触发器”。
3、在“触发器”窗口中,单击“新建”按钮,打开“新触发器属性”对话框。
4、在“常规”选项卡中,输入触发器名称和描述。
5、切换到“触发器类型”选项卡,选择“DML 触发器”,然后选择“FOR INSERT, UPDATE, DELETE”。
6、切换到“事件调度”选项卡,勾选“启用触发器”。
7、切换到“操作”选项卡,单击“新建”按钮,打开“新的作业步骤”对话框。
8、在“作业步骤名称”文本框中,输入作业步骤名称。
9、在“类型”下拉列表中,选择“OLE DB 命令”。
10、在“命令文本”文本框中,输入以下 SQL 语句:
EXEC msdb.dbo.sp_send_dbmail @profile_name = '邮件配置文件名', @recipients = '收件人邮箱地址', @subject = '表数据变更通知', @body = '表名:' + @TableName + ';变更时间:' + @ModifiedDate;
11、单击“确定”按钮,保存作业步骤。
12、单击“确定”按钮,保存触发器。
配置邮件服务器
1、打开 SQL Server Management Studio,连接到目标数据库。
2、在“对象资源管理器”中,展开“管理”节点,选择“SQL Server Agent”。
3、右键单击“SQL Server Agent”,选择“新建作业”。
4、在“作业属性”窗口中,输入作业名称和描述。
5、切换到“步骤”选项卡,单击“新建”按钮,打开“新建作业步骤”对话框。
6、在“作业步骤名称”文本框中,输入作业步骤名称。
7、在“类型”下拉列表中,选择“TransactSQL”。
8、在“命令文本”文本框中,输入以下 SQL 语句:
USE master; GO EXEC sp_configure 'show advanced options', 1; RECONFIGURE; GO EXEC sp_configure 'smtp server', 'smtp服务器地址'; EXEC sp_configure 'smtp port', '25'; 如果使用其他端口,请修改此处的值 EXEC sp_configure 'smtp authentication', 'true'; 如果使用匿名发送,请修改此处的值为 false EXEC sp_configure 'smtp user', '发件人邮箱地址'; 注意:此处的邮箱地址应与第6步中的收件人邮箱地址相同,否则会提示密码错误 EXEC sp_configure 'smtp password', '发件人邮箱密码'; 注意:此处的邮箱密码应与第6步中的收件人邮箱地址相同,否则会提示密码错误 EXEC sp_configure 'smtp sender', '发件人邮箱地址'; 注意:此处的邮箱地址应与第6步中的收件人邮箱地址相同,否则会提示发件人错误 RECONFIGURE; GO
9、单击“确定”按钮,保存作业步骤。
10、单击“确定”按钮,保存作业。
启动作业和触发器
1、在 SQL Server Management Studio 中,执行以下 SQL 语句以启动作业:
USE msdb; GO DECLARE @job_id BINARY(16); EXEC msdb.dbo.sp_start_job @job_name = N'作业名称'; 请替换为实际的作业名称;@job_id = @job_id output; 获取作业 ID;SELECT @job_id AS JobId; 查看作业 ID;GO; GO 是批处理语句的一部分,不能省略;PRINT @job_id; 如果需要打印作业 ID,可以取消注释此行代码;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再查看作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再查看作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再查看作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再查看作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再查看作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再查看作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再查看作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再查看作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再查看作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再查看作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再查看作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再查看作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再查看作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再查看作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:00:30'; 如果需要等待一段时间再观察作业状态,可以取消注释此行代码并设置合适的延迟时间;GO; GO 是批处理语句的一部分,不能省略;WAITFOR DELAY '00:04:3
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/504959.html