我想为
NStatusFlag
不应该等于 5
和 14
的文档创建一个存储过程
如果文档持有超过 3 天,它还应该向相应用户发送提醒;如果超过 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
表中获取分配文档的用户名称。
注意
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
更新以获得高级名称
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
此查询获取拥有 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 代理作业中运行
关于“发送提醒”,假设这是电子邮件,我建议您先设置 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
如何使用 sp_send_dbmail 过程从 sql server 数据库发送多封电子邮件
尝试一下,如果愿意的话可以问更多问题