SQL Server中 2005 新intoduced回滚事务中的SQL Server的方式 2005
SET XACT_ABORT ON
当XACT_ABORT为上. 在T-SQL语句将自动回滚该事务中的语句时发生错误.
SET XACT_ABORT ON
使用EMP
BEGIN TRAN
INSERT INTO EmpInfo值(1)
INSERT INTO EmpInfo值(1) — 这条语句将提高主键错误
INSERT INTO EmpInfo值(2)
COMMIT TRAN
说明书的第一行会没有任何错误执行. 主键错误将提高在第二行. 但整个区块的交易将不被犯,因为XACT_ABORT在.
你应该注意到,XACT_ABORT终止当前*批次*, 不完整的命令. 批次分离用GO关键字. 将继续执行在下一批次的开始.
此功能也在SQL Server 2000, 虽然它的表现略有不同的各种错误.
在SQL 2000, 在有些情况下XACT_ABORT无法自动回滚事务个案.
例如:
插入了无效的列名.
插入带有IDENTITY _关主键.
执行使用了一个不存在的UDF的SELECT.
这些类型的错误通常是由于一个撰写不佳命令, 所以他们除非有人改变了架构不会发生在你的程序的日常的日常运作. 但我部署一个项目的新版本时,编写数据库更新脚本时,说明其可能性, 以防万一部署不按计划进行.
有办法处理这些错误. 您的COMMIT应该是在执行DML语句批处理. 批后 (在GO关键字后) 你可以检查@ @ TRANCOUNT来看看它是否大于零并采取相应的行动. 通常回滚事务.
交易可以跨越批, 这样你就可以在以后的批次执行回滚.