SQL 服务器:锁定 table 以阻止其他会话尝试读取 table

SQL Server : lock table to block other sessions trying to read the table

我需要能够在 SQL 服务器中锁定 table,同时做一些工作。锁需要阻止其他会话读取 table。工作完成后,需要解锁 table。

在 MySQL 中,我使用了:

LOCK TABLES [table] WRITE

此时其他会话尝试从 table 读取时将被阻止,直到 table 解锁。

UNLOCK TABLES

现在阻塞将停止。

这在 SQL 服务器中可行吗?

BEGIN TRANSACTION 

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

COMMIT TRANSACTION

TABLOCKX 将获得 table 上的独占锁,其他用户将无法读取或更新数据,直到您自己提交事务。

编辑

与其像我之前建议的那样做 SELECT *,不如做 SELECT TOP 1 1 它会在 table 上获得独占锁,并且不会浪费任何时间返回实际数据,例如一个 SELECT * 就可以了。