实现效果:
定期向发送邮件信息,来提醒他们已经X天没有登录了。(X是自己定义的)
实现原理:
用到了sqlserver的“作业”,“数据库邮件”以及“存储过程”
所用到的数据:
用到了用户表,表名为:tb_Admin。下面展示要用到的主要的字段:
字段名称 |
解释 |
Id |
主键 |
RealName |
用户真实姓名 |
LoginTime |
显示用户的登录时间 |
UserEmail |
用户邮箱 |
存储过程的实现:
最近刚学习sqlserver,可能写的不是太好。但是最终效果是能实现的。如果大家有什么更好的想法,希望给我留言,让我学到更多的东西。
存储过程功能:实现传过来相应参数,从而输出获得数据的邮箱,以及用户真实姓名:
具体代码如下:
Create PROCEDURE [dbo].[SendEmail] @count int,@email nvarchar(50) output,@name nvarchar(20) output AS BEGIN select @email= UserEmail,@name=RealName from (select *,ROW_NUMBER() over(order by Id) rownum from tb_Admin where DATEDIFF(DD,LoginTime,GETDATE())>30) t where t.rownum =@count END
数据库“邮件服务”的建立:
如图所示:
大家可以用这个查询语句来检测自己的邮件服务是否可用
use msdb go exec dbo.sp_send_dbmail @profile_name='配置文件名', @recipients='邮箱地址', @subject='这是测试邮件', @body = '这是测试内容'
刚才上面的邮件服务的具体的实例如下:
use msdb go exec dbo.sp_send_dbmail @profile_name='管理员', @recipients='1548288966@qq.com', @subject='这是测试邮件', @body = '这是测试内容'
效果如图所示:
邮箱收到的内容如下:
Sqlserver作业的建立:
框中所放的T-SQL的脚本如下:
declare @counttest int; declare @email nvarchar(50); declare @content nvarchar(100) declare @name nvarchar(20); select @counttest = COUNT(*) from KJCXB.dbo.tb_Admin where DATEDIFF(DD,LoginTime,GETDATE())>30; while @counttest >0 begin exec KJCXB.dbo.SendEmail @counttest,@email output,@name output; set @counttest = @counttest-1; if @email is not null and LEN(@email)>1 begin set @content = @name+',你好,你已经超过天没有登录科技创新部了,创新部的成长需要你我共同关注,欢迎回来看看:kjcx.heuu.edu.cn'; exec msdb.dbo.sp_send_dbmail @profile_name='管理员', @recipients=@email, @subject='回家看看', @body = @content end end
我们会看到作业下面已经有我们自己建立的作业了
可以如下检测一下:
然后我们的相应的邮箱会收到如下邮件:
这样就成功了,数据库会按照我们设定好的作业来检测相应的未登录超过三十天的用户,然后给他们发送提示邮件。