begin tran
  insert table1 values (1,2)
  insert table2 values (1,2)
commit tran----改为rollback tran则上面的两条语句都不会插入
-------------例:
declare @err int
begin tran
  insert table1 values(1,2)
  set @err=@@error
  insert table2 values(1,2)
  if @@error<>0 or @err<>0
    rollback tran
commit tran

解决方案 »

  1.   

    我看到有的系统的源码中像INSERT,UPDATE这样的操作有的地方
    使用事务,有的就没有,这是为什么??听说事务会占用系统资
    原,那一般哪种情况下才使用事务呢???
      

  2.   

    但是只应该在需要事务的时候才使用,因为在事务的一开始就会把事务中所有涉及的表进行相关的锁定,因此如果一组庞大的SQL组成的事务可能锁定所有表,造成其他查询全部变慢。
    而且,很重要的是,如果忘记判断@@error,那么这个事务基本就没什么用,当然可以在事务定义之前写上set xact_abort on,这样就会自动的起到一个错误全部事务回滚的效果