当前位置: 代码迷 >> Sql Server >> 念问下这个触发器为什么不起作用
  详细解决方案

念问下这个触发器为什么不起作用

热度:98   发布时间:2016-04-24 09:52:12.0
想问下这个触发器为什么不起作用?
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 )
  相关解决方案