如何在SQL Server中锁定表行?如果我使用事务,它会锁定整个表。但是我只需要锁定一个特定的行。
实施例
Begin tran
Select Accountbalance from User_table where userid=934352
Commit tran
如果我执行此查询,此行应该锁定。此记录不应读取任何其他事务,但其他用户可以读取。我们只需要锁定934352 userId。
谢谢, Somu
答案 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