我在uniqueidentifier列上有一个包含聚簇主键索引的表。我有一个运行以下psuedo函数的过程:
begin transaction
read from table 1
insert into table 2
update table 1 with pointer to table 2 record
commit transaction
这一切都正常,直到从其他地方同时执行相同的程序。一旦发生这种情况,其中一个执行会在主键上每次都被解锁并终止。
任何想法我能做些什么来防止这种情况,只是简单地说“不要同时运行”?事务当前在READ COMMITTED隔离级别中运行。
答案 0 :(得分:2)
在eulerfx.myopenid.com提示时提高事务隔离级别。
使用sql“mutexes”简单地等待一个程序完成,然后让另一个程序运行。 http://weblogs.sqlteam.com/mladenp/archive/2008/01/08/Application-Locks-or-Mutexes-in-SQL-Server-2005.aspx
使用快照隔离级别。依赖你的应用程序可以做什么。然而,这会带来其他问题。 http://msdn.microsoft.com/en-us/library/ms189050.aspx
数字2需要更多的代码更改而不是1。但有时你不能只提高隔离级别。
答案 1 :(得分:1)