【发布时间】:2011-02-08 05:16:22
【问题描述】:
我有一个长时间运行的 SP(它可以运行长达几分钟),它基本上对事务中的各种表执行许多清理操作。我正在尝试确定以某种方式将人类可读的状态信息传递回调用者的最佳方法,以了解 SP 当前正在执行的进程的哪个步骤。
因为整个 SP 在单个事务中运行,我不能将此信息写回状态表然后从另一个线程读取它,除非我使用 NOLOCK 来读取它,我认为这是最后的手段,因为:
- NOLOCK 可能会导致其他数据不一致问题;和
- 这让任何想要读取他们需要使用 NOLOCK 的状态表的人都有责任,因为表或行可能会被锁定很长一段时间。
有没有办法在事务中发出单个命令(或执行第二个 SP)并告诉指定该特定命令不应成为事务的一部分?或者 ADO.NET 是否有其他方法可以深入了解这个长期运行的 SP 以了解它当前在做什么?
【问题讨论】:
标签: sql-server tsql ado.net