2016-09-23 60 views
-2

如何捕獲錯誤信息等「錯誤轉換數據類型爲varchar到日期時間」catch錯誤消息

這個錯誤把在選擇輸出

BEGIN 
    SET NOCOUNT ON; 

    begin try 
     UPDATE projects 
     SET 
      projectUser = @projectUser, 
      projectStartDate = @projectStartDate 
     where projectId = @projectId 
     SELECT 'OK' 
    end try 

    begin catch 
     SELECT 'ERROR - msg error' 
    end catch  

    COMMIT 

END 

我不需要==>https://postimg.org/image/u8mohtl9b/

任何解決方案?

+1

標籤您與您正在使用的數據庫的問題。還顯示導致代碼失敗的示例數據。 –

+1

標記您正在使用的dbms。 (看起來像特定於產品的代碼。) – jarlh

+1

不要擔心如何捕獲錯誤消息,爲什麼不修復它。我可以看到,你可能會引發這個錯誤的最可能的方式是,如果將@ projectStartDate作爲varchar傳遞給過程/查詢。只需更改參數的數據類型以匹配列的數據類型,即可解決問題。如果你堅持使用不正確的數據類型並處理錯誤,那麼你可以使用['ERROR_MESSAGE()'](https://msdn.microsoft.com/en-us/library/ms190358.aspx)來捕獲它。 – GarethD

回答

0

您遇到的問題是,調用過程時錯誤沒有在程序存在的,它正在發生。在一個簡單的例子,創建以下過程:

IF OBJECT_ID(N'dbo.ErrorCatchTest', 'P') IS NOT NULL 
    DROP PROCEDURE dbo.ErrorCatchTest; 
GO 
CREATE PROCEDURE dbo.ErrorCatchTest @int INT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    BEGIN TRY 
     DECLARE @T TABLE (I INT); 
     INSERT @T (I) VALUES (5.0/@int); 

     SELECT 'OK'; 
    END TRY 
    BEGIN CATCH 
     SELECT CONCAT('Error_Message: ', ERROR_MESSAGE()); 
    END CATCH 
END; 

如果我通過一個有效的INT的程序:

EXECUTE dbo.ErrorCatchTest @int = 1; 

的,我得到OK的要求。

enter image description here

如果我一通0強制錯誤:

EXECUTE dbo.ErrorCatchTest @int = 0; 

enter image description here

你得到所需的錯誤消息,但如果我嘗試的傳遞一個無效的整數:

EXECUTE dbo.ErrorCatchTest @int = 'Not a number'; 

enter image description here

然後我得到錯誤消息,因爲錯誤不在過程中,而是在參數上進行隱式轉換。

解決這個問題的方法是調用一個try/catch塊中的程序:

BEGIN TRY 
    EXECUTE dbo.ErrorCatchTest @int = 'Not a number'; 
END TRY 
BEGIN CATCH 
    SELECT CONCAT('Error_Message: ', ERROR_MESSAGE()); 
END CATCH 

enter image description here

+0

Tnx很多... –

1

您可以選擇錯誤消息像下面...

Begin Catch  
     SELECT 'Error_Message: ' + ERROR_MESSAGE() + ' Error_Line: ' + ERROR_LINE() AS ErrorMessage  
End Catch 
+0

我需要結果爲https://postimg.org/image/lkgzwmq4f/ –

0

如果您只需要錯誤消息,使用下面的腳本。

BEGIN CATCH 
SELECT 'Error_Message :'+ERROR_MESSAGE() 
END CATCH 

輸出樣本:

enter image description here

+0

我不知道是否有可能獲得==> https://postimg.org/image/5wsxjfuy5/ –