2011-07-22 4 views
2

J'ai une procédure stockée qui appelle une autre procédure stockée. SP2 a un try/transaction/catch/rollback/raiserror. Si SP2 déclenche une erreur, va-t-il passer en SP1 à l'appelant, ou dois-je aussi imbriquer l'appel à SP2 dans un try/catch? Si ce dernier cas est le cas, comment puis-je m'assurer que je ne tue pas la "trace de la pile" de l'erreur du SP2 lors de l'élévation/la sortie du SP1?Flux d'exception dans une procédure stockée appelant une autre procédure stockée

- est-ce que cela déclenchera une erreur de SP2 et de sortie SP1?

EXEC dbo.storedProc2 @someParameter = @someValue 

--Ou est-ce que je dois faire ceci?

BEGIN TRY 
    EXEC dbo.storedProc2 @someParameter = @someValue 
END TRY 
BEGIN CATCH 
    -- this is what I normally do in a simple catch/raise scenario: 
    -- will it kill the error stack? 
    DECLARE @ErrMsg VARCHAR(4000), @ErrSeverity INT, @ErrState INT, @ErrLine INT 
    SELECT @ErrMsg = ERROR_MESSAGE() + ' Line %d', 
      @ErrSeverity = ERROR_SEVERITY(), 
      @ErrState = ERROR_STATE(), 
      @ErrLine = ERROR_LINE() 
    RAISERROR(@ErrMsg, @ErrSeverity, @ErrState, @ErrLine) 
END CATCH 

Répondre

2

Vous aurez besoin d'avoir un bloc TRY/CATCH externe.

Si vous avez uniquement l'erreur d'interception dans SP2, les erreurs SP2 s'interrompent.
Il passera ensuite le code d'erreur à SP1, mais SP1 continuera à s'exécuter dans la plupart des circonstances (exception serait une erreur fatale avec la gravité 20-25).

Il n'y a pas de réel piégeage d'erreur inhérent sans utiliser TRY/CATCH (ou en vérifiant @@Error si vous êtes old-school) - le code continuera à s'exécuter, pour le meilleur ou pour le pire.

+0

L'erreur va-t-elle passer aux variables @Err dans SP1 dans l'exemple de ma question? –

+0

@AJ - Je ne pense pas, sauf si vous utilisez des codes retour et des paramètres de sortie pour chaque appel 'SP'. – JNK

0

Vous devez piéger et traiter les erreurs dans dbo.storedProc2

Revenez ensuite des codes d'erreur en utilisant la méthode n retour

SP1 peut alors faire face à cette erreur (s) de quelque manière est nécessaire.

Questions connexes