2011-02-16 12 views
0

取消的存儲過程,我在SQL Server中的存儲過程,它看起來是這樣的:抓在SQL Server

insert into Record(StartTimestamp) values (GETDATE()) 
SET @MyID = SCOPE_IDENTITY() 
begin try 
    -- do something 
    UPDATE Record SET EndTimestamp = GETDATE() WHERE ID = @MyID 
end try 
begin catch 
    UPDATE Record SET EndTimestamp = GETDATE(), Error = ERROR_MESSAGE() WHERE ID = @MyID 
end catch 

它從一個應用程序調用,需要幾秒鐘才能運行。如果用戶在運行時取消它,我最終會在Record表中記錄一個StartTimestamp,但不會出現錯誤,也不會有EndTimestamp。我總是想知道用戶啓動了這個存儲過程,但我也希望在完成時始終記錄,無論是成功,錯誤還是取消。

在SQL Server中有沒有辦法做到這一點?

謝謝

回答

1

也許你可以重做取消邏輯?因此,不要從業務層調用SqlCommand.Cancel來執行某個第二個proc,它會在某處設置一個標誌,然後在該標誌運行時對該標誌執行第一個proc檢查...

SqlCommand.Cancel的整點在於它真正停止執行,停止運行SP並執行回滾。我認爲你必須從業務層面處理這個問題。

GJ

+0

我想你可能是對的,但我沒有自己的業務層,所以我希望能夠從我身邊做。 – Dave 2011-02-16 12:16:09