2009-07-20 50 views

回答

0

有一個清楚地說明SP是否已創建的打印語句會更具可讀性。

例如

CREATE PROCEDURE CustOrdersDetail @OrderID int 
AS 
... 
... 
... 
GO 
IF OBJECT_ID('dbo.CustOrdersDetail') IS NOT NULL 
    PRINT '<<< CREATED PROCEDURE dbo.CustOrdersDetail >>>' 
ELSE 
    PRINT '<<< FAILED CREATING PROCEDURE dbo.CustOrdersDetail >>>' 
GO 
+0

如果您的應用程序打電話,此打印在哪裏? – msvcyc 2009-07-20 06:14:00

+0

如果通過某種工具而不是應用程序調用多個sps的腳本,這將是有益的。如果您通過應用程序執行單個sp,請使用RETURN或SELECT而不是PRINT。 – 2009-07-20 09:34:34

1

使用RAISERROR在程序出錯的情況下集成了大多數客戶比使用假out參數更好。他們只是簡單地調用過程,而RAISERROR在客戶端應用程序中轉化爲異常,並且應用程序代碼很難避免異常,因此必須對其進行處理。

0

SP非常像一個方法/子程序/程序&他們都有一個任務要完成。該任務可以像計算&一樣簡單地返回結果,或者可以僅僅是對錶中記錄的簡單操縱。根據任務的不同,您可以返回指示任務結果的輸出值,無論它是成功,失敗還是實際結果。

0

如果您需要針對整個項目/數據庫的通用T-SQL解決方案,則可以使用所有過程的輸出參數。但RAISEERROR是處理客戶端代碼中的錯誤的方式,而不是T-SQL。

0

爲什麼不使用不同的返回值,然後可以在代碼中處理?

0

引入額外的輸出參數或額外的選擇是不必要的。

如果您唯一需要知道的是是否存在問題,成功的執行是足夠好的選擇。看看XACT_ABORT和TRY ... CATCH herehere的討論。

如果您想知道具體的錯誤,return code是將此信息傳遞給調用者的正確方法。

0

在大多數生產場景中,我傾向於在數據庫層中部署自定義錯誤報告組件,作爲解決方案的一部分。沒有什麼特別的,只有少數幾個日誌表和一些存儲過程來管理錯誤記錄過程。

然後使用SQL Server 2005及更高版本中提供的TRY-CATCH-BLOCK功能封裝在生產服務器上執行的所有存儲過程代碼。

這意味着,如果某個給定的存儲過程發生故障,發生錯誤的詳細信息以及生成它的存儲過程將記錄到日誌表中。一個簡單的存儲過程調用是從CATCH BLOCK內部進行的,以便記錄相關的細節。

此實現的基礎,在書實際上是解釋網上here

你應該願意,你可以很容易地進一步通過將電子郵件通知到DBA甚至短信提醒擴展此實現,例如可以發送依賴關於錯誤的嚴重程度。

這種類型的實現可以確保如果您的存儲過程沒有報告失敗,那當然是成功的。

一旦您擁有了一個簡單而健壯的框架,就可以直接複製並將您的基礎實施推廣到其他生產服務器/應用程序平臺。

這裏沒什麼特別的,只是簡單的錯誤日誌和報告工作。

另一方面,如果您還需要記錄存儲過程的成功執行,那麼可以設計一個類似的解決方案,其中包含日誌表。

我認爲這個問題是尖叫出來的博客帖子...... ..

相關問題