我在SQL Server上运行时有一个较大的报告。运行需要几分钟。我不希望用户单击两次运行。由于我将整个过程包装在事务中,因此如何检查表是否被事务锁定?如果是这样,我想返回一条错误消息,内容为“正在生成报告,请在几分钟后重试”。
如何做到这一点?
更好的是,考虑sp_getapplock为此目的而设计。或使用SET LOCK_TIMEOUT
sp_getapplock
SET LOCK_TIMEOUT
否则,您将不得不做一些sys.dm_tran_locks我仅用于DBA的事情:而不是用于用户定义的并发性。
sys.dm_tran_locks