5

我有一个 ASP.Net 网页,用户在其中选择一行进行编辑。我想在该行上使用行锁,一旦用户完成编辑和更新,另一个用户可以编辑该行,即如何使用行锁,以便只有一个用户可以编辑一行?

谢谢

4

2 回答 2

5

您不能使用数据库引擎锁来锁定这样的行。

大多数其他策略将依赖于保持连接打开(例如 sp_getapplock),这在 Web 应用程序中是无意义的。

即使你在行上设置了一个标志,如果用户只是在编辑中关闭浏览器会发生什么?

我建议使用时间戳/行版本列来检测其他会话中对行的更改。

于 2010-04-20T09:51:20.353 回答
5

在这里,我在 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

提示礼貌地要求 SQL Server 持有锁,HOLDLOCK直到您提交事务。该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/

谢谢

于 2015-07-14T14:41:01.623 回答