日期:2014-05-18  浏览次数:20528 次

请教大家几个关于SQL事务的问题
1、使用事务向表中插入数据时,能否发生多个用户同时向同一行中插入数据的情况?如果能,请问如何避免?
2、使用事务的回滚,当向一个有自动增长字段的行中插入数据失败后,执行回滚,请问自动增长的那个字段是否也会回滚?

------解决方案--------------------
--2, 自动增长的字段不会回滚


create table T(ID int identity(1, 1), Name varchar(10))
insert T(Name) select 'AA '
go
begin tran
insert T(Name) select 'BB '
rollback tran
go
insert T(Name) select 'CC '
go
select * from T
go
drop table T
------解决方案--------------------
在事务中插入行,如果涉及到自增长类型时,最好使用SET IDENTITY_INSERT把identity列的数据显式填写出来,这样回滚事务时identity列也会回滚。但是问题是,插入的时候需要同时需要提供一个算法使插入使给定的identity键值是按照identity的自增长方式填写的,这个算法在SQL SERVER的book online上可以找到。