我想为
创建一个存储过程NStatusFlag
不应等于5
和14
和
如果文件与他们在一起超过3天,它应该将Reminder发送给相应的用户,如果超过5天,那么它应该将其发送给其高级用户
日期应使用表格的U_datetime
和系统中的SYSTEM
日期计算。
我的NStatusFlag
建议打开所有文件。
我在下面尝试过。
ALTER PROCEDURE GET_INWARD_REMINDER_REPORT
AS
BEGIN
Select * from inward_doc_tracking_trl
where NStatus_flag <> 5
and NStatus_flag <> 14
END
GO
所以我得到了所有打开的文件,如下所示
但是我很困惑如何通过与日期比较来获取所有用户并发送提醒。
另外,我将从inward_doc_tracking_hdr
表中获取分配文档的USer的名称。
注意 inward_doc_tracking_hdr
表格mkey
与ref_mkey
表格中的inward_doc_tracking_trl
相关。
请帮助我。
更新
我从此查询中获取所有用户
ALTER PROCEDURE GET_INWARD_REMINDER_REPORT
AS
BEGIN
Select distinct a.mkey, b.mkey, a.first_name + ' ' + a.last_name from user_mst a
inner join inward_doc_tracking_hdr b
on a.mkey = b.User_Id
END
GO
更新以获取SEnior名称
select * from inward_doc_tracking_hdr order by mkey desc -- here I get To_User
select * from user_mst where mkey = 187 -- here I get To_User
select Reporting_To,* from emp_mst where mkey = 122 -- here I get Senior
答案 0 :(得分:1)
此查询获取包含3天或更长时间文档的人员的跟踪行(您可能需要注意时间组件)。请测试一下,看看它是否符合您的要求。
Select TL.*
from inward_doc_tracking_trl TL
where TL.NStatus_flag NOT IN (5,14)
and TL.U_datetime <= DATEADD(d, -3, GETDATE())
如果3天或5天过期,则此查询可用,如果逾期3天,则填充第二列:
Select
TL.*,
U.UserName,
CASE
WHEN TL.U_datetime <= DATEADD(d, -5, GETDATE())
THEN M.Reporting_To
ELSE NULL
END SeniorName
from inward_doc_tracking_trl TL
INNER JOIN inward_doc_tracking_hdr TH
ON TH.mkey = TL.ref_mkey
INNER JOIN user_mst U
ON TH.User_Id = U.mkey
INNER JOIN emp_mst M
ON M.mkey = U.employee_mkey
where TL.NStatus_flag NOT IN (5,14)
and TL.U_datetime <= DATEADD(d, -3, GETDATE())
您需要每天运行它,我建议在预定的SQL代理作业
中关于&#39;发送提醒&#39;,假设这是电子邮件,我建议您先设置SQL Mail:https://msdn.microsoft.com/en-au/library/hh245116.aspx
然后使用sp_send_dbmail
https://msdn.microsoft.com/en-au/library/ms190307.aspx发送电子邮件
您还需要在游标中使用上述查询并将其反馈到sp_send_dbmail
How to send multiple emails from sql server database using sp_send_dbmail procedure
如果你愿意,可以解决这个问题并提出更多问题