[SQL2005] TRY-CATCH ne passe pas le contrôle au CATCH ?
Bonjour,
Soit le script suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| CREATE PROCEDURE PsTest
AS
BEGIN
BEGIN TRY
PRINT 'Avant SELECT'
SELECT dbo.Fn_FonctionQuiNExsitePas()
PRINT 'Après SELECT'
END TRY
BEGIN CATCH
PRINT 'Entrée CATCH'
PRINT 'Erreur: ' + ERROR_MESSAGE()
PRINT 'Sortie CATCH'
END CATCH
END
GO
EXEC dbo.PsTest |
La fonction Fn_FonctionQuiNExsitePas() porte bien son nom.
A l'exécution de la procédure stockée PsTest, j'obtiens la sortie suivante :
Citation:
Avant SELECT
Msg*4121, Niveau*16, État*1, Procédure*PsTest, Ligne*6
Impossible de trouver la colonne "dbo" la fonction définie par l'utilisateur ou l'agrégat "dbo.Test". Le nom pourrait également être ambigu.
L'erreur étant de niveau 16, le contrôle aurait du être transmis au bloc CATCH, donc j'aurais du voir les "Entrée CATCH" et "Sortie CATCH".
Pourquoi cela se passe-t-il autrement ?