Sql server 是否可以在SQL SERVER的事务中使用SELECT语句锁定行

Sql server 是否可以在SQL SERVER的事务中使用SELECT语句锁定行,sql-server,transactions,rowlocking,Sql Server,Transactions,Rowlocking,在SQL SERVER中,是否可以在事务中使用SELECT语句锁定行?我想锁定该行,以便外部的其他事务无法到达该行 提交或回滚事务后,应释放该行。这就是我的意思 BEGIN TRANSACTION TRAN1 SELECT * FROM HR.Employees WITH (UPDLOCK) WHERE empid=1 ... ... ... ... COMMIT TRANSACTION 有人有什么建议吗?我应该执行UPDATE语句来锁定行吗 请不要将此问题标记为重复问题。因为,我不是在问U

在SQL SERVER中,是否可以在事务中使用SELECT语句锁定行?我想锁定该行,以便外部的其他事务无法到达该行

提交或回滚事务后,应释放该行。这就是我的意思

BEGIN TRANSACTION TRAN1

SELECT * FROM HR.Employees WITH (UPDLOCK) WHERE empid=1
...
...
...
...
COMMIT TRANSACTION
有人有什么建议吗?我应该执行UPDATE语句来锁定行吗

请不要将此问题标记为重复问题。因为,我不是在问UPDATE语句,而是在问SELECT


编辑:我试图“将事务隔离级别设置为可序列化”,但这会锁定太多内容。我的SP很大,有很多SELECT语句。”SET TRANSACTION ISOLATION LEVEL SERIALIZABLE'锁定SP中所有选择的行。但是,我只希望锁定一个表中的行。

UPDATE lock是一种特殊类型的锁,在UPDATE语句搜索要更新的行时使用。它与共享锁兼容,因此它增加了并发性,并且在转换为XLOCK时将转换死锁的可能性降至最低

您可以在SELECT语句中对表使用XLOCK提示,但请注意,它可能会锁定比您预期的更多的数据,这通常取决于索引和数据的物理路径

此外,使用RCSI,它不会阻塞读卡器


这里最好使用其他应用程序控制的逻辑,而不是依赖SQL Server的锁定机制。

我认为HOLDLOCK表提示就是您要寻找的。发件人:

挂锁 相当于可序列化。有关详细信息,请参阅本主题后面的SERIALIZABLE。HOLDLOCK仅适用于为其指定的表或视图,并且仅适用于由使用它的语句定义的事务的持续时间。不能在包含FOR BROWSE选项的SELECT语句中使用HOLDLOCK


@Oscar,不,它与你提供的链接不重复。我在问有关SELECT的问题。你的链接解释了更新声明另一个:@Oscar,我在你提供的链接中尝试了解决方案。这给了我很大的希望,但没有成功。因为SP中的“将事务隔离级别设置为可序列化”锁定了很多东西。我的SP是巨大的,它做了很多选择。如果它锁定我选择的所有行,系统将停止。我特别想用SELECT锁定一个表中的行,关于什么?这是正确的做法。我要把(罗洛克)加入调料中。请注意,这并不会真正锁定行。它锁定聚集索引中的索引记录(可能)。其他索引仍然可读,甚至可以X锁定。