VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 852|回复: 5

触发器求时间段的问题

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-2-16 01:00:01 | 显示全部楼层 |阅读模式
兄弟我写一个程序,有这么个需求,觉得应该用触发器来实现,但我以前没怎么用过触发器,所以请教一下各位大侠!

用表1来存储每次刷卡的时刻,用表2来存储两次刷卡之间的时间长度。

表1的结构:
字段名    类型
SWITCH    String
CALTIME   Datetime

表2的结构:
字段名    类型
TIMESPAN  Decimal

也就是说,
当刷卡记录为 '开' 2017-01-04 20:00:00 时,触发器不做任何动作;
当刷卡记录为 '关' 2017-01-04 21:30:00 时,触发器依据这一对数据,
在表2中添加一条记录,并记录下时间长度为 1.5 小时
回复

使用道具 举报

0

主题

49

帖子

35.00

积分

新手上路

Rank: 1

积分
35.00
发表于 2020-4-16 22:45:01 | 显示全部楼层
create trigger t_time on 表1
for insert
as
begin
insert into 表2 (TIMESPAN)
select datediff(hour,a.CALTIME,b.CALTIME)  --如果表2中需要纪录日期,则在这里可以加上一列 convert(varchar(10),a.CALTIME,120)
from 表1 a inner join inserted b
      on a.SWITCH = '开' and b.SWITCH = '关'
         and convert(varchar(10),a.CALTIME,120) = convert(varchar(10),b.CALTIME,120)
end
go
回复

使用道具 举报

0

主题

126

帖子

73.00

积分

新手上路

Rank: 1

积分
73.00
发表于 2020-4-17 13:15:02 | 显示全部楼层
create trigger t_time on 表1
for insert
as
begin
insert into 表2 (TIMESPAN)
select datediff(hour,(select MAX(CALTIME) from 表1 WHERE SWITCH = '开'),inserted.CALTIME)
WHERE inserted.SWITCH = '关'
end
go
回复

使用道具 举报

0

主题

48

帖子

30.00

积分

新手上路

Rank: 1

积分
30.00
发表于 2020-4-21 10:15:01 | 显示全部楼层
create trigger trgtest on tablename1
instead of insert
as
begin
insert into tablename2(timespan)
select datediff(hour,b.caltime,a.caltime)
from inserted a ,
(select max(caltime)  as caltime from tablename1) b
where a.switch='开'
insert into tablename1 select * from inserted
end
回复

使用道具 举报

0

主题

48

帖子

30.00

积分

新手上路

Rank: 1

积分
30.00
发表于 2020-4-21 12:00:02 | 显示全部楼层
前提是每次只插入一条记录
回复

使用道具 举报

0

主题

40

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-5-5 12:00:02 | 显示全部楼层
用after触发器,可不可以达到投机取巧的效果呢,没用Inserted表。

create trigger t_time on 表1
after insert
as
begin
declare @switch char(5)
declare @mtime datetime
select @switch=switch from 表1 where CALTIME=(select Max(CALTIME) from 表1)
if @switch='关'
insert into 表2(timespan)
select datediff(hour,caltime,caltime)
from 表1
end
go
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表