使用TRANSACTION ISOLATION LEVEL SERIALIZABLE时的锁定范围

时间:2013-04-25 08:16:18

标签: sql-server-2008 tsql serialization locking transaction-isolation

以下链接描述了可序列化的事务隔离级别。

http://blogs.msdn.com/b/sqlcat/archive/2011/02/20/concurrency-series-basics-of-transaction-isolation-levels.aspx

假设我有一个用户更新表[dbo].[Table_A]。另一个用户正在更新表[dbo].[Table_B]。我想序列化这两个更新语句(意思是在第二个更新语句开始之前等待第一个更新语句),尽管事实上我们正在触及不同的表。我猜我不能使用表锁,但也许一个范围锁可以实现这一点。有人可以帮我理解代码的样子吗?或者这不适用于SQL Server 2008中的事务隔离级别功能吗?

1 个答案:

答案 0 :(得分:1)

您可以放置​​应用程序锁:

EXEC  sp_getapplock @resource = 'my_resource_token', @lockMode = 'Exclusive'

UPDATE ...

EXEC  sp_releaseapplock @resource = 'my_resource_token'

如果另一个会话已获得my_resource_token,则会锁定。