Question

Quelqu'un at-il trouvé une augmentation des performances / tradoff d'utiliser BEGIN TRY..END dans ESSAYEZ sql server 2008, vs l'ancien IF @@ ERROR <> 0? Juste curieux de savoir s'il y a des pénalités de performance ou non.

Était-ce utile?

La solution

Ceci est une question ancienne, mais en 2012 Aaron Bertrand a écrit un article détaillé

CheckInsert    |  Checks `IF EXISTS` first  |  Simple `INSERT`
CheckRollback  |  Checks `IF EXISTS` first  |  Use `IF @@ERROR <> 0`
CheckTryCatch  |  Checks `IF EXISTS` first  |  Use `TRY CATCH`
JustInsert     |                            |  Simple `INSERT`
JustRollback   |                            |  Use `IF @@ERROR <> 0`
JustTryCatch   |                            |  Use `TRY CATCH`

Autres conseils

Depuis le disque de base de données sont identiques problèmes a frappé, il devrait y avoir aucun problème de performance appréciable.

Depuis SQL 2005, vous devriez essayer d'utiliser la manière ESSAYER CATCH pour gérer les exceptions ou connecte les erreurs. Il est considéré comme la meilleure pratique. Il devrait y avoir pas de performance majeure frappé en l'utilisant.

BEGIN TRY
    BEGIN TRANSACTION
    -- SQL 
    COMMIT TRANSACTION
END TRY
BEGIN CATCH
    ROLLBACK
    SELECT
        ERROR_MESSAGE(),
        ERROR_NUMBER() -- etc
END CATCH

Oubliez la performance, il est un spectacle sacrément plus sûr, mieux et plus predicatable.

Cependant, l'utilisation @@ ERROR nécessite généralement un GOTO et / ou beaucoup d'instructions IF pour gérer correctement donc je suppose qu'il peut y avoir un petit coup de pouce dans try..catch.

La performance de ... CATCH est TRY très probablement un peu plus quand il n'y a pas d'erreurs. D'autre part, il sera plus rapide dans de nombreux cas où il y a une erreur.

Mais, vous ne devriez pas coder strictement pour la performance de toute façon. Et, les frais généraux, le cas échéant, va être assez petit, donc je ne troquer la syntaxe plus sûre pour la performance dans ce cas.

En outre, le Try ... Catch rend le code un peu plus facile à maintenir, surtout si votre équipe SQL dev n'a pas été autour de SQL Server très longue, qui, malheureusement, arrive un peu trop souvent. J'imagine que ce sera plus le cas quelques années.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top