对你这样的要求,如果没有主键,触发器很容易出错,可能只有一个方法来保证触发器正常,那就是限定每次只能修改一条记录。create trigger tr_table1_update on table1 for update as if @@RowCount>1 then begin RAISERROR ('一次只能修改一条记录,事务已经回滚.', 16, 1) ROLLBACK TRANSACTION end select @diff=a.BBB-b.BBB from inserted as a, deleted as b -- where a.AAA=b.AAA --这时可以不要这些条件,因为已经保证两个临时表都只有一条记录。
select @diff=a.BBB-b.BBB
from inserted as a,
table1 as b
where a.AAA=b.AAA
select @diff=a.BBB-b.BBB
from inserted as a,
deleted as b
where a.AAA=b.AAA
謝謝各位的回答,在我的table表中AAA是主鍵,所以以上方法非常好。但我想再問一下:
如果AAA不是主鍵時要怎么辦?
UPDATE原理就是删除一行(放入DELETED表)后,添加一行(放入INSERTED表)。
on table1
for update
as
if @@RowCount>1 then
begin
RAISERROR ('一次只能修改一条记录,事务已经回滚.', 16, 1)
ROLLBACK TRANSACTION
end
select @diff=a.BBB-b.BBB
from inserted as a,
deleted as b
-- where a.AAA=b.AAA --这时可以不要这些条件,因为已经保证两个临时表都只有一条记录。