在事务中使用提交是否足够?

| 在ѭ1中足够使用
Commit
,否则我也应使用
rollback
tabel1
  name   nvarchar(10)
  family nvarchar(20)

table 2 
    name nvarchar(10)
    family nvarchar(20) not null

begin transaction
insert into table2 (name) values(\'john\')
insert into table1 (name,family) values(\'Joe\',\'Lando\')
commit transaction
如您所见,第一条语句有错误。我应该在某处使用回滚吗?     
已邀请:
        如果使用SET XACT_ABORT ON(SQL Server 2000链接),则可以跳过ROLLBACK
SET XACT_ABORT ON
begin transaction
insert into table2 (name) values(\'john\')
insert into table1 (name,family) values(\'Joe\',\'Lando\')
commit transaction
从链接:   当SET XACT_ABORT为ON时,如果Transact-SQL语句引发运行时错误,则整个事务将终止并回滚。 现在,如果您不使用它,则需要回滚。或关闭您的连接。 SET XACT_ABORT ON的一个有用的副作用是,在客户端CommandTimeout事件之后,将释放锁,并回滚事务。否则,直到从SQL Server硬删除该连接后,该连接才会发生:由于池化,该连接可以保持打开状态。 您的圣经应该是Erland Sommarskog撰写的“ SQL 2000中的错误处理–背景”:请阅读。如此一来:我真的需要使用“ SET XACT_ABORT ON”吗?     
        首先,我怀疑存储过程是否会真正编译,因为它会认识到table2没有“ family”字段。 其次,建议您采用某种形式的检查以确保自己的健全性,但是在任何情况下,SQL Server都会在发生错误时自动回滚。     

要回复问题请先登录注册