2011-02-07 57 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

相關問題