专家您好
我如何锁定 sql server 中的一行以阻止 CRUD 操作甚至 SELECT。
是否可以?
可串行化隔离级别不会阻止 SELECT。
谢谢
BEGIN TRAN
SELECT 1
FROM Table
WITH (XLOCK, ROWLOCK)
COMMIT TRAN
这样就可以了。
EDIT
正如其他人所指出的,您不能锁定一行以使其不被读取。我知道这样做的唯一方法如下:
WITH (UPDLOCK, TABLOCK)
这是假设 SELECT 语句中从未使用过WITH (NOLOCK)(无论如何都应该避免)。
我对此进行了测试,它会起作用,尽管 TABLOCK 只应在极端情况下使用。当然,如果需要并发性,这是一个糟糕的解决方案,并且需要某种其他形式的锁定。一种方法是更新位列“Available True/False”并且仅读取Available = True 的行。正如 @gbn 建议的那样,READPASTcould与此一起使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)