2016-09-23 2 views
-2

wie Fangfehlermeldung etc „Fehler beim Konvertieren Datentyp varchar in Datetime“Fang Fehlermeldung von Stored Procedure

und diese in Select Ausgang setzen Fehler

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 

Ich brauche nicht ==>https://postimg.org/image/u8mohtl9b/

Irgendeine Lösung?

+1

Tag Ihre Frage. Zeigen Sie auch Beispieldaten an, die zum Fehlschlagen des Codes führen. –

+1

Markieren Sie die von Ihnen verwendeten dbms. (Sieht aus wie produktspezifischer Code.) – jarlh

+1

Anstatt sich darüber Gedanken zu machen, wie Sie die Fehlermeldung abfangen können, beheben Sie sie nicht. Die wahrscheinlichste Weise, die ich sehen kann, dass Sie diesen Fehler auslösen können, ist, wenn '@ projectStartDate' an die Prozedur/Abfrage als varchar übergeben wird. Ändern Sie einfach die Datentypen der Parameter, um sie den Datentypen der Spalten anzupassen, und Sie haben Ihr Problem gelöst. Wenn Sie darauf bestehen, falsche Datentypen zu verwenden und den Fehler zu behandeln, können Sie ['ERROR_MESSAGE()'] (https://msdn.microsoft.com/en-us/library/ms190358.aspx) verwenden, um es zu erfassen. – GarethD

Antwort

0

Das Problem, das Sie haben, ist, dass der Fehler nicht in der Prozedur auftreten, es auftreten wird, wenn die Prozedur aufrufen. In einem einfachen Beispiel, erstellen Sie das folgende Verfahren:

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; 

Wenn ich eine gültige INT an die Prozedur übergeben:

EXECUTE dbo.ErrorCatchTest @int = 1; 

Die ich OK nach Bedarf.

enter image description here

Wenn ich 0 ein Pass, einen Fehler zu erzwingen:

EXECUTE dbo.ErrorCatchTest @int = 0; 

enter image description here

Sie erhalten die Fehlermeldung je nach Bedarf, aber wenn ich eine ungültige ganze Zahl passieren versuchen:

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

enter image description here

Dann bekomme ich die Fehlermeldung, weil der Fehler nicht innerhalb der Prozedur ist, aber während eine implizite Konvertierung auf den Parametern.

Die Art und Weise, um dieses ist das Verfahren innerhalb eines try/catch-Block zu nennen:

mit der Datenbank Sie verwenden
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 viel ... –

1

Sie können die Fehlermeldung wie unten wählen ...

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

Ich brauche das Ergebnis als https://postimg.org/image/lkgzwmq4f/ –

0

Wenn Sie nur Fehlermeldung benötigen, die unten Skript verwenden.

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

Beispielausgabe:

enter image description here

+0

Ich weiß nicht, ob es möglich ist ==> https://postimg.org/image/5wsxjfuy5/ –