6
votes

Pourquoi enfin bloquer n'est pas donné dans SQL Server?

Toutes les langues comme c #, vb.net ont tous essayé d'attraper enfin bloc, mais SQL Server n'a que l'essai et n'attrape que pourquoi pas enfin le bloc est donné est une raison spécifique à cela?


0 commentaires

3 Réponses :


0
votes

C'est parce que la manipulation des erreurs par défaut est souvent assez bonne. Il était difficile d'écrire du code qui pourrait compiler mais causer une mauvaise défaillance.


0 commentaires

0
votes

À mon avis, essayez / enfin est une méthode de programmation procédurale et n'a donc pas vraiment de place ou besoin doit être inclus dans T-SQL, ce qui est considéré comme très important un langage de programmation basé sur un ensemble.

comme wallyk états et je suis d'accord, le bloc d'essai / capture existant dans T-SQL correspond à la grande majorité des exigences.

Je me demande si vous essayez peut-être de mettre en œuvre une logique de processus complexe qui serait mieux logée / gérée dans le niveau de l'application.


1 commentaires

Je ne vois pas comment la nature axée sur la langue de la langue est inappropriée pour la syntaxe de traitement des erreurs structurées. Avant l'essai ... La syntaxe de capture a été introduite, le passage et la vérification des codes d'erreur était la façon recommandée de gérer les erreurs. Ce style de traitement des erreurs est très courant dans la langue procédurale.



7
votes

Il y a beaucoup d'autres problèmes avec essayer ... bloc de capture, tels que vous ne pouvez pas réthorner une erreur exactement comme vous l'avez attrapé, alors j'utiliserais la gestion des erreurs C # pour quelque chose de complexe. J'ai écrit un chapitre complet de livre, vous pouvez télécharger un fichier PDF gratuit ICI


3 commentaires

Vous voulez dire que vous ne pouvez pas l'envoyer comme un objet, mais vous êtes tout à fait bien pour capturer toutes les données de l'exception originale dans les variables et en utilisant celles de réthrow la même erreur, non?


@barthazar en SQL 2008 Il n'y a aucun moyen que vous puissiez réthrowe exactement la même erreur.


J'apprécie que vous ne pouvez pas retirhow error_line () mais tout le reste est là. Est-ce que je manque quelque chose?