Sql server 行锁定-手动使用(不同事务)

Sql server 行锁定-手动使用(不同事务),sql-server,locking,Sql Server,Locking,我想做一个这样的锁机制,但我不确定它是否可能。 首先,锁定临时表中的一行(使用select语句并将数据输出到应用程序) 接下来,我进行一些其他事务(插入、更新到另一个表) 然后释放锁定的行 在此期间,任何希望从锁定行获取数据的select语句都应该等待您所需要的只是最严格的事务隔离级别,它将阻止其他用户访问这些行,即使您只是在读取该行 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN TRANSACTION; SELECT * FR

我想做一个这样的锁机制,但我不确定它是否可能。 首先,锁定临时表中的一行(使用select语句并将数据输出到应用程序) 接下来,我进行一些其他事务(插入、更新到另一个表) 然后释放锁定的行


在此期间,任何希望从锁定行获取数据的select语句都应该等待

您所需要的只是最严格的事务隔离级别,它将阻止其他用户访问这些行,即使您只是在读取该行

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

BEGIN TRANSACTION;

   SELECT * FROM TableName WHERE <some row>

   UPDATE <Statement>

COMMIT TRANSACTION;
将事务隔离级别设置为可序列化;
开始交易;
从TableName中选择*,其中
使现代化
提交事务;
请参阅本文并尝试以下方法:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

BEGIN TRANSACTION;

   SELECT * FROM TableName (XLOCK, PAGLOCK) WHERE <some row>

   UPDATE <Statement>

COMMIT TRANSACTION;
将事务隔离级别设置为可序列化;
开始交易;
从TableName(XLOCK,PAGLOCK)中选择*,其中
使现代化
提交事务;

您是否检查了sp\u getapplock?听起来你好像在尝试实现一些东西similar@JamesZ:谢谢你。我会查的!Serializable不保证对行进行锁定。它保证串行执行。两个事务可以在serializable下并发读取相同的值,因为没有序列化冲突。