创建存储过程,为创建的文档设置提醒

问题描述 投票:0回答:1

我想为

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
sql sql-server stored-procedures sql-server-2005
1个回答
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 代理作业中运行

关于“发送提醒”,假设这是电子邮件,我建议您先设置 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 数据库发送多封电子邮件

尝试一下,如果愿意的话可以问更多问题

© www.soinside.com 2019 - 2024. All rights reserved.