create trigger screentime
on Xuanke
for insert
as begin
declare @day1 int
declare @day2 int
declare @time1 time
declare @time2 time
declare @time3 int
declare @Cno1 int
declare @Cno2 int
declare @Sno1 int
declare @id int
select @Cno1=Cno from inserted
set @time1=(select RenkeTime from Renke where Cno=@Cno1)
set @day1=(select RenkeDay from Renke where Cno=@Cno1)
set @id=1
select @Sno1=Sno from inserted
select IDENTITY(int,1,1) as ID,Cno INTO #Temp from Xuanke where Sno=@Sno1
set @day2=10000
while @day2!=null
begin
set @Cno2=(select Cno from #Temp where id=@id)
set @day2=(select RenkeDay from Renke where Cno=@Cno2)
set @id=@id+1
if @day1=@day2
begin
set @time2=(select RenkeTime from Renke where Cno=@Cno2)
set @time3=datediff(hour,@time1,@time2)*60+datediff(minute,@time1,@time2)
if @time3<=110 or @time3>=-110
begin
print '时间冲突'
rollback tran
end
end
end
end
我这个是上课时间冲突的触发器,选课添加,就会判断两个课程的上课时间,先算星期,如果在同一个星期天里,间隔时间又少于110分钟,也就是两节课的话,会拒绝添加
------解决思路----------------------
set @time3=datediff(minute,@time1,@time2)
这儿应该这样吧~~
------解决思路----------------------
为啥要这样写啊,感觉直接判定同一天不就好了。这个选课肯定有上课时间的吧。直接SELECT* from inserted as b
where exists(select * from tablenmae as a where ABS(datediff(mi,a.上课时间,b.上课时间))<110 )