2013-10-11 120 views
0

嗨,我正在使用SQL SERVER 2008 R2數據中心版本,我有這個存儲過程,我在使用raiserror引發自定義錯誤消息。有沒有辦法也可以得到sql server的defualt錯誤信息。存儲過程的代碼如下。如何獲得DEFAULT ERROR消息以及自定義RAISERROR消息

CREATE Procedure usp_SomeName 
@StableName   nvarchar(50) = NULL, 
@StableID   INT = NULL OUTPUT, 
@StableDescription ntext = NULL, 
@Picture   image = NULL, 
@ReturnCode   int = NULL OUTPUT, 
@ReturnMessage  nvarchar(100) = NULL OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    BEGIN TRY 

      IF @StableName IS NULL 
      RAISERROR('Validation Failed: Stable name cannot be null', 16,1) 

      IF EXISTS (SELECT StableName from dem.TableName 
         WHERE StableName = @StableName) 
       RAISERROR('Validation Failed: Stable Name already Exists',16,1) 

     BEGIN TRANSACTION 
      INSERT INTO TableName(StableName, [Description], Picture) 
      VALUES (@StableName, @StableDescription, @Picture) 

      COMMIT TRANSACTION 
     SELECT @ReturnCode = 0 , @ReturnMessage = 'Sucess! New Stable Details has added.' 
     SELECT @StableID = SCOPE_IDENTITY() 
    END TRY 

    BEGIN CATCH 
     IF (@@TRANCOUNT > 0) 
     ROLLBACK TRAN 

     SELECT @ReturnCode = ERROR_NUMBER(), @ReturnMessage = ERROR_MESSAGE() 

      SELECT @ReturnCode AS ReturnCode, @ReturnMessage AS ReturnMessage, 
       ERROR_LINE() AS ErrorLine, 
       ERROR_SEVERITY() AS ErrorSeverity, 
       ERROR_STATE() AS ErrorState 
    END CATCH 

    SET NOCOUNT OFF; 
END 

GO 
+2

在SQL Server 2012中,您將能夠使用THROW()。在此之前,我認爲你的運氣不好...... –

+0

謝謝你的回覆亞倫。自從您提到sql2012之後還有一個問題,我的公司正在討論是否要升級到SQL 2012,因爲「我的老闆」已經聽說了太多關於sql 2012問題的故事,您認爲他是對的還是他是隻是想保存一些便士? :) –

+0

新版本總會有恐懼和偏執。 SQL Server 2012引入了更多的限制性許可,這可能會推動某些客戶的成本上漲,但只要安裝SP1和CU6,就不應該有任何技術問題。 –

回答

0

您可以使用try catch,當您引發錯誤時,批處理將捕獲,然後使用@@ error_message查看錯誤消息。