2009-02-11 83 views
2

這裏的情景:從TSQL Proc返回錯誤的最佳方法是什麼?

  1. 您加載一個頁面,這使得基於數據庫中的數據(稱這些「假設」)
  2. 有人改變的假設
  3. 您提交頁面
  4. 錯誤!

的一般模式來解決這個問題是這樣的(右):

在你保存PROC,一開始並提交事務中,首先驗證你的假設。如果它們中的任何一個發生了變化,您應該返回一個正常的錯誤消息,類似於您遇到問題的ID的XML列表,您在中處理,而不是讓它由缺省錯誤處理基礎結構處理。

所以我的問題是什麼是最好的方式來做到這一點?

  • 返回xml列表和一個錯誤標誌在未設置的輸出參數中,如果它正確地完成則返回0?
  • 使用out參數返回錯誤狀態,proc的結果是錯誤列表還是proc的有效結果?
  • 還有別的嗎? (我要指出,RAISEERROR會導致PROC是錯誤的,並獲得由默認的錯誤處理代碼拾起)

更新:我想返回失敗ID的maniplatable列表(我打算在應用程序中突出顯示這些單元格)。我可以在RAISEERROR中以CSV格式返回它們,但看起來很髒。

回答

2

使用具有適當嚴重性和/或等待級別的RAISERROR函數。如果您使用較低的嚴重程度,這不一定會導致例外,正如您所爭辯的那樣,使用.Net至少可以非常簡單地檢索這些消息。唯一的缺點是使用.Net中的StoredProcedure命令類型只能以50個組抽取。

存儲過程可以返回多個結果集。根據您的更新,您也可以將錯誤的ID插入臨時表中,然後在過程結束時從該表中選擇記錄作爲您可以查看的附加結果集。

4

我同意 - 我喜歡RAISEERROR:

-- Validate @whatever 
IF @whatever >= '5' 
BEGIN 
    RAISERROR ('Invalid value for @whatever - expected a value less than 5, but received %s.', 10, 1, @whatever) 
    RETURN 50000 
END; 
相關問題