【问题标题】:Create Stored procedure for setting reminder for document created为创建的文档设置提醒的创建存储过程
【发布时间】:2016-10-30 09:12:46
【问题描述】:

我想为

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

如果文档与他们在一起超过 3 天,它还应该向相应的用户发送提醒,如果超过 5 天,那么它也应该将它发送给其上级 p>

日期应使用表格的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_hdrmkeyinward_doc_tracking_trl 表中的 ref_mkey 相关。

请帮帮我。

更新

我从这个查询中得到所有用户

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

【问题讨论】:

  • 要获取用户,您需要使用连接并连接到用户表。要获取具有正确日期的记录,您需要在日期字段上使用 where。您需要将其与当前日期进行比较(使用函数getdate())并且您需要使用dateadd 函数将其向后移动x 天
  • @Nick.McDermaid:感谢您的逻辑。如果您为它发布解决方案,那就太好了。如果你想从我这里得到什么,也请告诉我。
  • @Nick.McDermaid:查看我尝试过的更新。现在我被困在如何获得来自inward_doc_tracking_trl 表的Nstatus_flag 的各个条件。

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


【解决方案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_dbmailhttps://msdn.microsoft.com/en-au/library/ms190307.aspx发送邮件

您还需要在游标中使用上述查询并将其输入您的sp_send_dbmailHow to send multiple emails from sql server database using sp_send_dbmail procedure

如果你愿意,可以尝试一下,并提出更多问题

【讨论】:

  • 我的用户名来自user_mst 表并且与UserId.to mkey 来自user_mst 有关系当我尝试你的第二个代码时,它给出的错误为Incorrect syntax near ')'. 也是这个将是一个每天运行的调度程序
  • 很难知道为什么会出现错误。我建议您有选择地删除一些代码以找到错误所在的行。或者,您可以双击错误,它通常会跳转到错误附近的某个地方。如果您设置sqlfiddle.com,这些事情会更容易完成
  • user_mst 是否加入 inward_doc_tracking_trlinward_doc_tracking_trh?如您所见,我只是在这里猜测一大堆东西。高级用户是否也在user_mst 表中?是同一张唱片吗?通常这些表连接回自己。
  • user_mst 加入到inward_doc_tracking_hdr 作为 hdr 的User_Iduser_mstmkey 相关
  • 同样,高级来自emp_mst 表,列名为Reporting_To
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 2011-09-11
  • 2016-11-11
  • 2021-12-08
  • 2017-10-14
相关资源
最近更新 更多