2010-02-26 5 views
1

J'ai un problème avec les blocs TRY ... CATCH. Quelqu'un peut-il expliquer pourquoi le code suivant n'exécutera pas mon sp?TRY ... erreurs CATCH dans et la table de journal des erreurs

DECLARE @Result int 
SET @Result = 0 
BEGIN TRY 
    SELECT * FROM TableNoExist 
END TRY 
BEGIN CATCH 
    SET @Result = ERROR_NUMBER() 
END CATCH 
EXEC dbo.spSecurityEventAdd @pSecurityEventTypeID = 11, @pResult = @Result 

Mais ce code ne fonctionne:

DECLARE @Result int 
SET @Result = 0 
BEGIN TRY 
    SELECT 1/0 
END TRY 
BEGIN CATCH 
    SET @Result = ERROR_NUMBER() 
END CATCH 
EXEC dbo.spSecurityEventAdd @pSecurityEventTypeID = 11, @pResult = @Result 

Je voudrais vous assurer que je prends toutes les erreurs. Merci

Répondre

2

Compile et Déclaration de niveau Erreurs de recompilation

Il existe deux types d'erreurs qui ne seront pas traitées par TRY ... CATCH si l'erreur se produit dans le même niveau d'exécution que la construction TRY ... CATCH:

Compilez les erreurs, telles que les erreurs de syntaxe qui empêchent l'exécution d'un lot.

Erreurs qui se produisent lors de la recompilation au niveau de l'instruction, telles que les erreurs de résolution de nom d'objet qui se produisent après la compilation en raison de la résolution de noms différée.

http://msdn.microsoft.com/en-us/library/ms179296.aspx