有可能出现这种情况:
读表1,读表2,事物更新表1、2、3、4,读表3、读表4,计算统计数据,那么这样就会出错了。
如果想保证读一致,那就得保证读得过程中不能更新,可以考虑在读过程中加更新锁,以阻止在读过程中进行更新。
begin tran
select x1 from tb1 with(updlock)
select x2 from tb2 with(updlock)
select x3 from tb3 with(updlock)
select x4 from tb4 with(updlock)
set Y=x1+x2+x3+x4
commit
有可能出现这种情况:
读表1,读表2,事物更新表1、2、3、4,读表3、读表4,计算统计数据,那么这样就会出错了。
如果想保证读一致,那就得保证读得过程中不能更新,可以考虑在读过程中加更新锁,以阻止在读过程中进行更新。
begin tran
select x1 from tb1 with(uplock)
select x2 from tb2 with(uplock)
select x3 from tb3 with(uplock)
select x4 from tb4 with(uplock)
set Y=x1+x2+x3+x4
commit
更新中本来就有如同上述的事务控制,但是我在测试的时候还是会发生客户数据异常,明显就是可以表一表二更新了 但是变三表四没有被更新的时候进行了数据统计的结果[/quote]
这个和你的隔离级别有关系,先设置快照隔离,再测试吧:)
ALTER DATABASE 数据库名 SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE 数据库名 SET READ_COMMITTED_SNAPSHOT ON
[/quote]
悲剧,快照隔离只有在2005版本以后才有的,我的是mssql 2000,哭死!!!
更新中本来就有如同上述的事务控制,但是我在测试的时候还是会发生客户数据异常,明显就是可以表一表二更新了 但是变三表四没有被更新的时候进行了数据统计的结果[/quote]
这个和你的隔离级别有关系,先设置快照隔离,再测试吧:)
ALTER DATABASE 数据库名 SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE 数据库名 SET READ_COMMITTED_SNAPSHOT ON
[/quote]
怎樣查詢数据库名的隔离级别?
更新中本来就有如同上述的事务控制,但是我在测试的时候还是会发生客户数据异常,明显就是可以表一表二更新了 但是变三表四没有被更新的时候进行了数据统计的结果[/quote]
这个和你的隔离级别有关系,先设置快照隔离,再测试吧:)
ALTER DATABASE 数据库名 SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE 数据库名 SET READ_COMMITTED_SNAPSHOT ON