如何在SQL Server中按行锁定表

时间:2014-03-18 10:11:44

标签: sql sql-server

如何在SQL Server中锁定表行?如果我使用事务,它会锁定整个表。但是我只需要锁定一个特定的行。

实施例

Begin tran

Select Accountbalance from User_table where userid=934352

Commit tran

如果我执行此查询,此行应该锁定。此记录不应读取任何其他事务,但其他用户可以读取。我们只需要锁定934352 userId。

谢谢, Somu

2 个答案:

答案 0 :(得分:1)

如前所述,锁定不会阻止用户读取该行。

也许你可以在你的表中添加一个有点的列,即1或0.如果你想让它可见,你可以将这个位设置为1,如果你不想让人看到它,可以设置为0,然后,您可以实现一个视图,只选择数据库中位值为1的行。

例如

我创建了一个名为Employees的表,看起来像这样

Id |  Name  |    Address   | Salary | IsViewable
---|--------|--------------|--------|------------
 1 | Bloggs | Fake address | 50000  |    0
 2 | Parker | Fake address | 17000  |    1

然后,您将使用以下select语句创建视图...

SELECT Id, Name, Address, Salary
FROM Employees
WHERE IsViewable = 1

我希望这涵盖了你所要求的一切。这样,您就可以阻止人们查看您不希望别人看到的行。此外,如果您愿意,也可以锁定该特定行,但实际上没有任何意义。

答案 1 :(得分:0)

我认为你可以用RowLock做到这一点,但我会小心。
查询看起来像这样:

BEGIN TRAN
    SELECT Accountbalance 
    FROM User_table 
    WITH (HOLDLOCK, ROWLOCK)
    WHERE userid=934352
COMMIT TRAN