SqlServer触发器计算年休假天数

SqlServer触发器计算年休假天数

根据插入语句中的进入本单位工作时间字段,自动计算年休假天数
数据库:sqlsever2012

表结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

触发器代码

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER[dbo].[annualLeaveUpdate]
   ON [dbo].[C20200901114532]
   AFTER INSERT
AS 
BEGIN
DECLARE @共计 decimal(10,2)
DECLARE @进入本单位工作时间 DATE --进入本单位工作时间变量
DECLARE @currentDate DATE --当前日期变量
DECLARE @diffDate INT --入职年限变量
DECLARE @error int    
DECLARE @temp varchar(50)
SET @error=0
SET @currentDate = getdate()

declare order_cursor cursor --定义游标变量order_cursor
for (select [id] from inserted)--申明游标为id
--打开游标--
open order_cursor
--开始循环游标变量--
fetch next from order_cursor into @temp
while @@FETCH_STATUS = 0    --返回被 FETCH语句执行的最后游标的状态
		begin 
			  SELECT @进入本单位工作时间 = 进入本单位工作时间 FROM C20200901114532 WHERE id = @temp
				SET @diffDate = datediff(yy,@进入本单位工作时间,@currentDate)
				IF @diffDate > 0 AND @diffDate < 1 
				BEGIN SET @共计 = 0 
				END 
				ELSE IF @diffDate >= 1 AND @diffDate < 10 
					BEGIN SET @共计 = 5 
					END 
				ELSE IF @diffDate >= 10 AND @diffDate < 20 
					BEGIN SET @共计 = 10 
					END 
				ELSE IF @diffDate >= 20 
				BEGIN 
					SET @共计 = 15 
				END
				UPDATE C20200901114532 SET [共计]=@共计 where id=@temp
				set @error= @error + @@ERROR   --记录每次运行sql后是否正确,0正确
				fetch next from order_cursor into @temp   --转到下一个游标,没有会死循环
		end   
close order_cursor  --关闭游标
deallocate order_cursor   --释放游标
END
GO
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值