J'écris une fonction définie par l'utilisateur dans SQL Server 2008. Je sais que les fonctions ne peuvent pas générer d'erreurs de la manière habituelle - si vous essayez d'inclure l'instruction RAISERROR SQL retourne:Comment signaler une erreur d'une fonction définie par l'utilisateur SQL Server
Msg 443, Level 16, State 14, Procedure ..., Line ...
Invalid use of a side-effecting operator 'RAISERROR' within a function.
Mais le fait est, la fonction prend une entrée, qui peut être invalide et, si elle est, il n'y a pas de valeur significative la fonction peut revenir. Qu'est-ce que je fais alors?
Je pourrais, bien sûr, renvoyer NULL, mais il serait difficile pour tout développeur utilisant la fonction pour résoudre ce problème. Je pourrais aussi provoquer une division par zéro ou quelque chose comme ça - cela génèrerait un message d'erreur, mais trompeur. Y a-t-il un moyen de signaler mon propre message d'erreur?
OUI !!! Ça marche! C'est brillant! – EMP
Bonne réponse, mais JEEZ veut pirater. > :( – JohnL4
Pour une fonction inline-table-value où le RETURN est un select simple, cela seul ne fonctionne pas car rien n'est renvoyé - pas même null, et dans mon cas je voulais lancer une erreur quand rien n'a été trouvé Je ne voulais pas décomposer la fonction inline en multi-statuts pour des raisons évidentes de performance.J'ai plutôt utilisé votre solution plus ISNULL et MAX.La déclaration RETURN ressemble maintenant à ceci: SELECT ISNULL (MAX (E.EntityID) , CAST ('La recherche (' + @LookupVariable + ') n'existe pas.' As Int)) [EntityID] FROM Entité comme E WHERE E.Lookup = @ LookupVariable – MikeTeeVee