当更新employee表中emp_no列的值时,同时更新sales表中的sale_id列的值,并且一次只能更新一行
create trigger tr_employe_update
on employee for update
as
  begin
    declare @oldEmp_no char(20)
     declare @newEmp_no char(20)
     declare @row_cnt int
     select @row_cnt=COUNT(*) from inserted
     if @row_cnt>1
     begin
           print'每次只能更新一条记录!!'
           rollback transaction
     end
     if UPDATE(emp_no) and @@ROWCOUNT=1
     begin
        select @oldEmp_no=emp_no from deleted
        select @newEmp_no=emp_no from inserted
        update sales
        set sale_id=@newEmp_no
        where sale_id=@oldEmp_no
     end 
  end
请问上述代码有没有什么问题啊、、、求解

解决方案 »

  1.   

    这个是题目的要求,更新多条这个我知道。
    在测试的时候。employee中emp_no是主键,sales中sale_id是employee的外键,主键是order_no, sale_item中的order_no是主键也是sales的外键,
    当我在更新emp_no值时,却提示sales sale_item间有外键约束,难道这个触发器破坏了完整性?如果要达到更新emp_no时,sale_id也能更新
      

  2.   

    更新emp_no时提示sales sale_item有外键约束
    sale_item中的order_no是sales的外键
    所以在怀疑是不是触发器有问题
      

  3.   

    if @row_cnt>1
      begin
      print'每次只能更新一条记录!!'
      rollback transaction
      end
    改为if @row_cnt>1
      begin
      raiserror('每次只能更新一条记录!!',16,1)
      rollback transaction
      return
      end