根据插入语句中的进入本单位工作时间字段,自动计算年休假天数
数据库: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