Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server :relancer l'exception avec le numéro d'exception d'origine

Vous pourrez peut-être le relancer comme ceci :

..
END TRY
BEGIN CATCH
    DECLARE @errnum int;
    SELECT @errnum = ERROR_NUMBER();
    RAISERROR (@errnum, 16, 1);
END CATCH

Cependant, vous perdez très probablement une perte de sens à cause des espaces réservés %s etc. dans les lignes sys.messages pour ERROR_NUMBER()

Vous pouvez faire quelque chose comme ça pour inclure le numéro et renvoyer le message d'origine

..
END TRY
BEGIN CATCH
    DECLARE @errnum nchar(5), @errmsg nvarchar(2048);
    SELECT
        @errnum = RIGHT('00000' + ERROR_NUMBER(), 5),
        @errmsg = @errnum + ' ' + ERROR_MESSAGE();
    RAISERROR (@errmsg, 16, 1);
END CATCH

Les 5 premiers caractères sont le numéro d'origine.

Mais si vous avez du code imbriqué, vous vous retrouverez avec "00123 00456 Texte d'erreur".

Personnellement, je ne traite que les numéros d'exception SQL pour séparer mes erreurs (50000) des erreurs de moteur (par exemple, des paramètres manquants) où mon code ne s'exécute pas.

Enfin, vous pouvez lui transmettre la valeur de retour.

J'ai posé une question à ce sujet :Gestion des erreurs SQL Server :exceptions et contrat client-base de données