You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WAITFOR调用含表更新的存储过程,等待期间会锁定数据吗?

WAITFOR等待阶段是否会锁定存储过程相关数据?

结论很明确:不会。

  • WAITFOR语句的作用只是延迟后续代码的执行,在等待阶段,当前会话并没有执行任何数据库读写或修改操作,自然不会对任何数据产生锁定。
  • 你的示例代码中,WAITFOR TIME '23:00:00'只是让会话等到指定时间,之后才会执行EXEC MyStoredProcedure。只有当存储过程开始运行,里面的更新语句执行时,才会按照SQL Server的锁机制生成对应的锁,锁的生命周期和直接执行存储过程完全一致,不会因为前面的WAITFOR等待而延长。

你提到直接执行非存储过程时出现全程锁定的情况,大概率是因为你把更新操作和WAITFOR放在了同一个事务中,且更新操作在WAITFOR之前执行——比如类似这样的代码:

BEGIN TRANSACTION;
UPDATE MyTable SET ... WHERE ...;
WAITFOR TIME '23:00:00';
COMMIT TRANSACTION;

这种情况下,更新产生的锁会因为事务未提交而一直持有,直到WAITFOR结束后才释放,才会出现“全程锁定”的现象,但这和存储过程无关,是事务和WAITFOR的执行顺序导致的。


内容的提问来源于stack exchange,提问作者SLee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:42:31