2011-02-07 20 views
1

我有一个长时间运行的SP(它可以运行多达几分钟),它基本上对事务中的各种表执行一些清理操作。我试图确定最好的方式来将人类可读的状态信息传回给调用者SP当前正在执行的过程的哪个步骤。将状态信息从存储过程传递给调用方在事务内

由于整个SP在单个事务中运行,我不能将此信息写回到状态表,然后从另一个线程读取它,除非使用NOLOCK读取它,而我认为这是最后的解决方法,因为:

  • NOLOCK可能导致其他数据不一致问题;和
  • 这使得任何想读取状态表的人都有责任使用NOLOCK,因为表或行可能会锁定很长一段时间。

有什么办法可以在事务中发出单个命令(或EXEC第二个SP)并告诉指定该特定命令不应该成为事务的一部分吗?或者还有其他一些方法可以让ADO.NET深入了解这个长期运行的SP,看看它目前在做什么?

回答

3

您可以在过程中尝试使用RAISERROR(使用严重级别为10或更低)来返回信息性消息。

例子:

RAISERROR(N'Step 5 completed.', 10, 1) WITH NOWAIT; 
+0

+1您可能还想添加`... WITH NOWAIT;` – 2011-02-07 21:15:28

+0

@Martin:好点。添加。 – 2011-02-07 21:16:12