在表建立触发器后,某些数据不能插入,触发器是update过后触发,求助!!!
在线等
建立trigger的表是存储员工请假的表单,表单列有:
等字段,触发器的目的是当更新 finishedflag = 1 时 ,计算出请假的类型和时间插入另一张表refer_data对应字段中。但是当触发器运行后,请假的表单有些用户不能建立正常的数据,有些又能!正常和异常对比:
,下面是触发器的代码,可能定义和逻辑有点不精简,海涵一下:
建立trigger的表是存储员工请假的表单,表单列有:
等字段,触发器的目的是当更新 finishedflag = 1 时 ,计算出请假的类型和时间插入另一张表refer_data对应字段中。但是当触发器运行后,请假的表单有些用户不能建立正常的数据,有些又能!正常和异常对比:
,下面是触发器的代码,可能定义和逻辑有点不精简,海涵一下:
CREATE TRIGGER [dbo].[tr_formmain_0117_update] ON [dbo].[formmain_0117]
WITH EXEC AS CALLER
AFTER UPDATE
AS
declare @state int,@channel nvarchar(255);
declare @var1 varchar(25),@var2 varchar;
declare @nvar1 nvarchar(255);
declare @data2 numeric(20,5),@data3 numeric(20,5), @data_other numeric(20,5),@data_personal numeric(20,5);
declare @start_time datetime, @end_time datetime,@start_time_h datetime,@end_time_h datetime;
declare @start_time_hs int,@end_time_hs int,@time_h_poor int ,@time_d_poor int;
declare @time_all numeric(20,1);
BEGIN
select @state=finishedflag ,@channel=field0004,@var1 = start_member_id,@start_time = field0005,@end_time = field0006 from inserted;
select @nvar1 = NAME from ORG_MEMBER where ID = @var1;
select @var2 = ID from refer_user where cname = @nvar1;
select @data3 = isnull(year_leave,0),@data_other=isnull(other_leave,0),@data_personal=isnull(personal_leave,0) from refer_data where uid=@var2;
set @start_time_h = right(@start_time,8);
set @start_time_hs = DATEDIFF(s, '00:00:00',@start_time_h);
if(@start_time_hs<32400)
BEGIN
set @start_time_hs = 32400;
END
else if (@start_time_hs>43200 and @start_time_hs<46800)
BEGIN
set @start_time_hs = 46800;
END
set @end_time_h = right(@end_time,8);
set @end_time_hs = DATEDIFF(s,'00:00:00',@end_time_h);
if(@end_time_hs>43200 and @end_time_hs<46800)
BEGIN
set @end_time_hs = 43200;
END
else if(@end_time_hs>63000)
BEGIN
set @end_time_hs = 63000;
END
set @time_h_poor = 0;
if(@start_time_hs<43200 and @end_time_hs<=43200)
BEGIN
set @time_h_poor = @end_time_hs-@start_time_hs;
END
else if(@start_time_hs>=43200 and @end_time_hs>46800)
BEGIN
set @time_h_poor = @end_time_hs-@start_time_hs;
END
else if(@start_time_hs<=43200 and @end_time_hs>=43200)
BEGIN
set @time_h_poor = 43200-@start_time_hs+@end_time_hs-46800;
END
else if(@start_time_hs>=43200 and @end_time_hs<=43200)
BEGIN
set @time_h_poor = 63000-@start_time_hs+43200-@end_time_hs-27000;
END
set @time_d_poor = DATEDIFF(d,@start_time,@end_time);
set @time_all = round(@time_h_poor/3600.00,1) + @time_d_poor*7.5;
if(@state=1)
BEGIN
if(@channel='3914859601377381015')
BEGIN
update [dbo].[refer_data] set year_leave=@data3-@time_all where uid=@var2;
END
else if(@channel='-1135316255604717531')
BEGIN
update [dbo].[refer_data] set personal_leave=@data_personal+@time_all where uid=@var2;
END
ELSE
BEGIN
update [dbo].[refer_data] set other_leave=@data_other-@time_all where uid=@var2;
END
END
END
...全文
相关推荐
SQL Server 触发器 表的特定字段更新时,触发Update触发器
`inserted`和`deleted`是SQL Server在执行DML(数据操纵语言)操作时创建的两个系统表,它们分别存储了新插入的数据(对于INSERT和UPDATE操作)和旧数据(对于UPDATE
mysql 触发器实现两个表的数据同步
总的来说,MySQL触发器是保持多表数据一致性的重要工具,尤其适用于那些不能仅通过外键约束来维护的关系。通过理解和熟练运用触发器,我们可以设计出更加灵活且适应复杂业务逻辑的数据库系统。
MySQL触发器 Update触发Insert失败
在这个场景中,开发者尝试创建一个UPDATE触发器,当`triggletest_triggle`表中的数据被更新时,新的数据应被插入到`triggletest`表中,以保存历史记录。
sqlserver触发器例子
### SQL Server 触发器详解#### 一、触发器概念触发器是SQL Server中一种特殊的存储过程,其特点在于不能被显式地调用,而是当对特定表进行数据操作(如插入、更新或删除)时自动激活。
SQL触发器的使用及语法
SQL 触发器的实例:建立虚拟测试环境,包含:表[卷烟库存表],表[卷烟销售表]。请大家注意跟踪这两个表的数据,体会触发器到底执行了什么业务逻辑,对数据有什么影响。


疑难问题
