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

时间:2016-06-28 07:16:20

标签: sql sql-server stored-procedures sql-server-2005

我想为

创建一个存储过程
  1. NStatusFlag不应等于514
  2. 的文件

    如果文件与他们在一起超过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
    

    所以我得到了所有打开的文件,如下所示

    Image

      

    但是我很困惑如何通过与日期比较来获取所有用户并发送提醒。

    另外,我将从inward_doc_tracking_hdr表中获取分配文档的USer的名称。

    注意 inward_doc_tracking_hdr表格mkeyref_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
    

1 个答案:

答案 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

如果你愿意,可以解决这个问题并提出更多问题