2017-02-02 1 views
0

J'ai problème à stocker l'exception soulevée d'une procédure stockée.sont soulevées exception de procédure stockée comme variable de sortie

Par exemple, je suis d'avoir deux procédures stockées P_Add et P_GetAdd.
P_Add renvoie une exception sur la division par zéro comme indiqué, procédure P_GetAdd exécute P_Add.
Je veux revenir à l'exception soulevée par P_Add au code où P_GetAdd est exécuté.
P_Add excpets un paramètre qui n'a pas été fourni est l'erreur. Aidez-moi à obtenir le résultat. Merci.

create procedure P_add 
(
    @ErrorMessage varchar (100) OUTPUT 
) 
as 
Declare @a int 
Declare @b int 
declare @c int 

set @a = 1 
set @b = 0 

Begin try 
    SET @c = @a/@b 
end try 
begin catch 
    SET @ErrorMessage = ERROR_MESSAGE(); 
End catch 

create procedure P_getADD 
(
@ErrorMessage1 varchar (100) OUTPUT 
) 
AS 

IF EXISTS (
     SELECT * 
     FROM sysobjects 
     WHERE id = object_id(N'[dbo].[P_add]') 
     AND OBJECTPROPERTY(id, N'IsProcedure') = 1 
     ) 
BEGIN 
    EXEC P_add @ErrorMessage = @ErrorMessage1 
END 

Répondre

1

En supposant que je comprends la question, vous devez marquer @ErrorMessage1 comme output lors de l'exécution de la procédure stockée P_add:

CREATE PROCEDURE P_getADD 
(
    @ErrorMessage1 varchar (100) OUTPUT 
) 
AS 

IF EXISTS (
     SELECT * 
     FROM sysobjects 
     WHERE id = object_id(N'[dbo].[P_add]') 
     AND OBJECTPROPERTY(id, N'IsProcedure') = 1 
     ) 
BEGIN 
    EXEC P_add @ErrorMessage1 OUTPUT 
END 
+0

Merci pour fournir la solution. Mais je suppose que je peux aussi utiliser RAISERROR() pour lancer l'erreur à la procédure stockée parent. –

+0

La réponse était à la question qui a été postée. Si vous trouvez cette réponse correcte, veuillez la marquer comme acceptée afin que les autres sachent que le problème est résolu. Si vous avez trouvé une meilleure réponse, postez-la et acceptez-la. –