Existe-t-il un moyen de ne renvoyer aucun résultat au client en cas d'erreurs déclenchées avec RAISEERROR?

J'utilise Entity Framework pour appeler SP. Mon SP dans une exécution réussie renvoie une string, j'ai donc configuré mon type de return en tant que string dans le mappage EF. Lorsqu'il est exécuté, il fonctionne bien et je suis en mesure d'get le résultat.

En cas d'erreur, il y a un code dans SP qui renvoie des informations d'erreur sous la forme d'une table. Comme j'ai configuré la string comme mon type de return SP dans EF, j'obtiens une erreur chaque fois que j'obtiens une ligne d'erreur comme résultat.

Pour résoudre ce problème, plutôt que d'envoyer des lignes d'erreur, j'ai commencé à utiliser RAISEERROR (…) et à attraper l'exception dans le code C #.

Il y a peu de SP qui appelle en interne d'autres SP qui returnnent toujours la ligne d'erreur. Donc en cas d'échec maintenant, j'obtiens un résultat d'erreur de SP interne et une erreur d'augmentation de SP externe. Encore une fois cela provoque une défaillance dans le code C # en raison de la non-concordance du type de return. Étonnamment, l'exception est également ignorée par .Net.

Y at-il un moyen en SQL ou EF où je peux ignorer tous les résultats pour un lot en cas d'erreur?

C'est comme ça que je soulève une erreur

RAISERROR ('%s <%s:%d:%s>', 16, -1, @ErrorMessageText, @inProcName, @inErrorID, @EventLogGUID) 

Le nom SP est ABC, il est ajouté à EF et appelé par le code C # comme une simple fonction DBContext. Il devrait lancer une erreur et je n'ai pas essayé d'attraper le bloc.