SQL Server:锁定表以阻止其他会话尝试读取该表

sja*_*der 4 sql-server locking

我需要能够在做一些工作时锁定 SQL Server 中的表。锁需要阻止其他会话读取该表。工作完成后,需要解锁桌子。

在 MySQL 中,我使用以下方法完成了此操作:

LOCK TABLES [table] WRITE
Run Code Online (Sandbox Code Playgroud)

此时,其他会话在尝试从表中读取数据时将被阻止,直到表被解锁。

UNLOCK TABLES
Run Code Online (Sandbox Code Playgroud)

现在封锁将停止。

这在 SQL Server 中可能吗?

M.A*_*Ali 6

BEGIN TRANSACTION 

    SELECT TOP 1 1 FROM TableName WITH (TABLOCKX)
  /* do your stuff here */

COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)

TABLOCKX将获得表上的排他锁,并且在您自己提交事务之前,其他用户将无法读取或更新数据。

编辑

与其SELECT *像我之前建议的那样做,只需做 aSELECT TOP 1 1它将获得表上的排他锁,并且不会像 a 那样浪费任何时间返回实际数据SELECT *