Gestion des erreurs dans les Fonctions Définies par l'Utilisateur
Je veux écrire un non-CLR fonction définie par l'utilisateur dans SQL Server 2005. Cette fonction prend une chaîne d'entrée et retourne une chaîne de sortie. Si la chaîne d'entrée est incorrect, alors je veux indiquer une erreur à l'appelant.
Ma première pensée a été d'utiliser RAISERROR pour lever une exception. Toutefois, SQL Server n'autorise pas ce à l'intérieur d'une UDF (bien que vous pouvez soulever des exceptions dans le CLR à base de fonctions définies par l'utilisateur, allez comprendre).
Mon dernier recours serait de retourner une valeur NULL (ou une autre erreur-la valeur de l'indicateur), de la fonction si la valeur d'entrée est dans l'erreur. Cependant, je n'aime pas cette option, car elle:
- Ne pas fournir toute information utile à l'appelant
- Ne m'autorise pas à retourner une valeur NULL en réponse à une entrée valide (car il est utilisé comme un code d'erreur).
Est-il de l'appelant de manière conviviale pour interrompre une fonction sur une erreur dans SQL Server?
OriginalL'auteur Craig Walker | 2009-08-06
Vous devez vous connecter pour publier un commentaire.
Il semble que SQL Server UDF sont un peu limitées dans le présent (et beaucoup d'autres).
Vous ne pouvez vraiment pas faire beaucoup à ce sujet - c'est (pour l'instant) juste la façon dont il est. Vous pouvez définir vos UDF de sorte que vous pouvez le signal de retour d'une condition d'erreur par le biais de sa valeur de retour (par exemple de retourner la valeur NULL en cas d'erreur), ou alors il faudrait presque avoir recours à l'écriture d'une procédure stockée à la place, ce qui peut avoir beaucoup plus d'erreur de manipulation et permet RAISERROR et ainsi de suite.
Donc, soit de la conception de votre UDF de ne pas exiger la signalisation spécifique de conditions d'erreur, ou alors il faut re-architecte de votre approche de l'utilisation des procédures stockées (qui peut avoir plusieurs paramètres de SORTIE et peut donc aussi renvoyer le code d'erreur ainsi que vos données de charge utile, si vous avez besoin), ou gérés code CLR pour votre UDF de.
Désolé je n'ai pas de meilleure idée pour le moment, je le crains, ce sont vos options - faites votre choix.
Marc
Le problème avec sprocs est que vous ne pouvez pas les appeler inline la façon dont vous pouvez le faire avec les fonctions.
Je suis d'accord avec @MikeK. La seule raison pour laquelle je suis à l'aide de l'UDF et pas un plein stored_procedure est en ligne utilisation. A la réponse à cette question changé dans les nouvelles versions de SQL Server? (par exemple, 2016)
Je pense juste que c'est fantastique que cette question est toujours d'aider les gens, 8 ans plus tard. 🙂 Ah, et mettre à niveau SQL Server, nous avons à LANCER et à ATTRAPER aujourd'hui.
OriginalL'auteur marc_s
Il y a une solution possible étant donné dans une réponse à une double question ici, repose sur cette idée:
Qui jette quelque chose comme ceci:
Cela fonctionne bien pour les scalaires Udf, mais pas pour la table.
OriginalL'auteur Jonathan Sayce