Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2008 exec存储过程第三次罢工_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server SQL Server 2008 exec存储过程第三次罢工

Sql server SQL Server 2008 exec存储过程第三次罢工,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我被要求创建一个流程,当员工第三次罢工时触发存储过程。罢工与缺勤有关,因此如果员工在3个月内休假3次,就会触发罢工 但是这只适用于单个缺勤实例,因此如果一个人不在;例如,在2016年1月11日、2016年1月12日和2016年1月13日,这是一个例子。这意味着我不能计算请病假的天数 我有可用的数据,并且是无法更新的固定过程: Date | EmpID | EmpName 01/01/2016 | JS01 | John Spartan 02/01/2016 | JS01 |

我被要求创建一个流程,当员工第三次罢工时触发存储过程。罢工与缺勤有关,因此如果员工在3个月内休假3次,就会触发罢工

但是这只适用于单个缺勤实例,因此如果一个人不在;例如,在2016年1月11日、2016年1月12日和2016年1月13日,这是一个例子。这意味着我不能计算请病假的天数

我有可用的数据,并且是无法更新的固定过程:

Date        | EmpID | EmpName
01/01/2016  | JS01  | John Spartan
02/01/2016  | JS01  | John Spartan
03/01/2016  | JS01  | John Spartan
08/01/2016  | JS01  | John Spartan
19/02/2016  | JS01  | John Spartan
12/02/2016  | JS01  | John Spartan
基于上述情况,有两个以上的实例。所以这会触发程序

IF EXISTS (<Query Here>)
BEGIN
    EXEC usp_ThreeStrikes
END
如果存在()
开始
执行usp_三击
结束

在T-SQL中有这样做的方法吗?

如果您不能添加列来帮助查询任务(例如InstanceID查询将分组以找出实例数),我认为最好的解决方案是为任务创建聚合CLR函数


您可以尝试以下方法:

  • 在表中添加一列,以区分该记录是否应被视为下一次删除(意味着在1个实例之后,不应被视为第二次)

  • 根据以下条件创建SQL Update触发器以调用该过程:

    • 获取其列被考虑用于下一次罢工的记录(与您在第一步中创建的列相同)
    • 对于这些特定记录,检查计数是否大于或等于3,并调用存储过程
    • 对于那些特定的记录,更新附加列(在步骤1中创建)以不考虑后续攻击

  • 希望这能有所帮助。

    这里有一个查询,列出了每个季度缺席三次或三次以上的
    empid
    。您可以在触发器中修改此查询,以仅在触发器中插入的表中存在的EMPID/Quarter中进行选择

    PS:我添加了一些随机缺勤,以显示查询仅在缺勤次数为三次或更多时选择


    结果:

    +-------+-------------------------+
    | empid |         quarter         |
    +-------+-------------------------+
    | JS02  | 2015-10-01 00:00:00.000 |
    | JS01  | 2016-01-01 00:00:00.000 |
    +-------+-------------------------+
    
    +-------+-------------------------+
    | empid |         quarter         |
    +-------+-------------------------+
    | JS02  | 2015-10-01 00:00:00.000 |
    | JS01  | 2016-01-01 00:00:00.000 |
    +-------+-------------------------+