Sql server SQL Server 2008 exec存储过程第三次罢工
我被要求创建一个流程,当员工第三次罢工时触发存储过程。罢工与缺勤有关,因此如果员工在3个月内休假3次,就会触发罢工 但是这只适用于单个缺勤实例,因此如果一个人不在;例如,在2016年1月11日、2016年1月12日和2016年1月13日,这是一个例子。这意味着我不能计算请病假的天数 我有可用的数据,并且是无法更新的固定过程: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 |
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函数
您可以尝试以下方法:
- 获取其列被考虑用于下一次罢工的记录(与您在第一步中创建的列相同)
- 对于这些特定记录,检查计数是否大于或等于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 |
+-------+-------------------------+