如何检查表是否在sql server中被锁定 [英] How to check if a table is locked in sql server
问题描述
我有一个大报告我在sql server上运行。运行需要几分钟。我不希望用户点击运行两次。因为我在事务中包装整个过程,我如何检查以查看表是否被事务锁定?如果是这样,我想返回一条错误消息,说生成报告,请在几分钟后再试一次。
I have a large report I am running on sql server. It takes several minutes to run. I don't want users clicking run twice. Since i wrap the whole procedure in a transaction, how do I check to see if the table is locked by a transaction? If so I would want to return an error message saying "report generating, please try again in a few minutes".
如何实现?
推荐答案
更好的是,考虑 sp_getapplock
。或使用 SET LOCK_TIMEOUT
Better yet, consider sp_getapplock
which is designed for this. Or use SET LOCK_TIMEOUT
否则,您必须使用 sys.dm_tran_locks
我只用于DBA的东西:不是用户定义的并发。
Otherwise, you'd have to do something with sys.dm_tran_locks
which I'd use only for DBA stuff: not for user defined concurrency.
这篇关于如何检查表是否在sql server中被锁定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!