如题,我现在有个存储过程,这个存储过程是用来计算当table4插入的记录的时间差(用的是datediff函数),存储过程的执行是靠table4中的触发器来触发执行的,触发器的执行条件是(当table4中每当machine-statu字段s有非0记录数据插入,且下一条记录machine-status字段是为0的时候,则执行该存储过程)
触发器代码:
ALTER trigger [dbo].[trigger4_2]
on [dbo].[table4] after insert,update,delete
as
declare @insertCount int
declare @deleteCount int
declare @t4Id bigint
begin
-- 删除数量
select @deleteCount=COUNT(1) from deleted;
-- 新增数量
select @insertCount=COUNT(1) from inserted;
if (@insertCount=1 and @deleteCount=0) -- 插入动作
begin
select @t4Id=id from inserted;
if exists (select * from table4 where id = @t4Id and machine_status = 0)
exec sp_table5_insert @t4Id;
end
目前存储过程的计算代码是这样:
ALTER proc [dbo].[sp_table5_insert]
@_T4ID BIGINT -- machine-status=0的自增id
as
BEGIN
-- 上一条错误代码记录id
DECLARE @_T4ErrorCodeID BIGINT
-- 分钟时差
DECLARE @_timeDifferenceMin INT
--时间段变量
DECLARE @shi int
set @shi=Datename(HOUR,GetDate())
--星期段变量
DECLARE @xingqi nvarchar(255)
set datefirst 1
set @xingqi=Datename(WEEKDAY,GETDATE())
-- 开始时间
DECLARE @_machineItime VARCHAR(50)
-- 获取上一条错误代码记录id并且计算以分钟为单位的时差
SELECT TOP 1 @_T4ErrorCodeID = id, @_timeDifferenceMin = DATEDIFF(SS,ng_itime,(SELECT machine_itime FROM table4
WHERE id = @_T4ID))
FROM table4
WHERE id < @_T4ID AND location IS NOT NULL AND pointer IS NOT NULL AND ng_itime IS NOT NULL
ORDER BY id DESC;
--判断时间,星期三早8点到星期三晚8点
set datefirst 1
set @xingqi=Datename(WEEKDAY,GETDATE())
if(@xingqi='星期三') and (@shi>8 and @shi<20)
begin
--对T5表操作存在类型累加时间不存在新增
IF EXISTS (SELECT * FROM table5 AS t5 LEFT JOIN table4 AS t4 ON t4.location=t5.location AND t4.pointer=t5.pointer
WHERE t4.id=@_T4ErrorCodeID)
--修改
UPDATE table5
SET [Wedtime_8:00AM-8:00PM] = ISNULL([Wedtime_8:00AM-8:00PM] ,0) + @_timeDifferenceMin
FROM table5 AS t5, table4 AS t4
WHERE t4.location=t5.location AND t4.pointer=t5.pointer AND t4.id=@_T4ErrorCodeID;
ELSE
--插入
INSERT INTO table5(location,pointer,[Wedtime_8:00AM-8:00PM])
SELECT location,pointer,@_timeDifferenceMin
FROM table4
WHERE id = @_T4ErrorCodeID;
END
由此可见,我的存储过程计算时间差是根据table4插入记录出现的先后顺序来配对计算的,但是现在发现,这样计算出来的结果有问题,详细的异常问题解释可到我另一个问答中查看,https://ask.csdn.net/questions/691300(在一个热心导师的回复下知道了问题所在)
重点不是这个,因为现在找出问题所在了。
现在我在table4中新加了一个字段used,并且设置了它的默认值为0,我想在datediff函数计算时间差的同时,加上一个used = 0 的条件,意思是计算的两条记录还要符合used = 0 才开始计算这两条记录的时间差,
当计算完后,并把计算的两条记录的时间差结果赋值到table5中,并且同时把这条记录的used = 0值更新为used= 1,表示已经计算过了
这么做的目的是,想给计算的两条记录建立一个配对关系,这样好让程序知道计算并赋值
附上我的table4,table5表结构
table4:
table5:
可是不知道该怎么编写这个条件语句和更新语句,本人小白一枚,刚从学校出来实习,项目一个人做,没人带,本来这个礼拜就要测试项目,可是现在出了这个问题,根本就测试不了,求CSDN内的各位SQL server大佬和专家帮我写下这个语句代码,留下我的QQ:584958184,还有哪里不清楚可以跟我说,我可以再解释,现在真的很急,跪求跪求帮助啊~!!!