我有一个ASP.Net网页,用户选择一行进行编辑。我想在该行上使用行锁,一旦用户完成编辑和更新,另一个用户就可以编辑该行,即如何使用rowlock以便只有一个用户可以编辑一行?
谢谢
答案 0 :(得分:4)
使用数据库引擎锁无法锁定行。
大多数其他策略都依赖于保持连接打开(例如sp_getapplock),这在Web应用程序中是荒谬的。
即使您在行上设置了标记,如果用户只是在编辑中间关闭浏览器会发生什么?
我建议使用timestamp / rowversion列来检测其他会话中对行的更改。
答案 1 :(得分:4)
这里我在select语句中给了两组sql到行锁。
BEGIN TRAN
SELECT *
FROM authors AU
WITH (HOLDLOCK, ROWLOCK)
WHERE AU.au_id = '274-80-9391'
/* Do all your stuff here while the row is locked */
COMMIT TRAN
HOLDLOCK
提示礼貌地要求SQL Server保持锁定,直到您提交事务为止。 ROWLOCK
提示礼貌地要求SQL Server仅锁定此行而不是发出页锁或表锁。
请注意,如果有大量行受到影响,SQL Server将主动升级为页锁,或者您将拥有一大堆行锁来填充服务器的内存并阻碍处理。
SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1
另一个我想与你分享锁定的好链接。 https://www.mssqltips.com/sqlservertip/1257/processing-data-queues-in-sql-server-with-readpast-and-updlock/
感谢