Je veux relancer la même exception dans SQL Server qui vient de se produire dans mon bloc try. Je suis capable de renvoyer le même message mais je veux renvoyer la même erreur.
DÉBUT TRANSACTION
BEGIN TRY
INSÉRER DANS Tags.tblDomain (DomainName, SubDomainId, DomainCode, Description)
VALEURS (@DomainName, @SubDomainId, @DomainCode, @Description)
VALIDER TRANSACTION
END TRY
BEGIN CATCH
déclarer @gravité int;
déclarer @état int;
sélectionner @gravité=error_severity(), @état=error_state();
RAISERROR(@@Error,@ErrorSeverity,@état);
ANNULER TRANSACTION
END CATCH
RAISERROR(@@Error, @ErrorSeverity, @état);
Cette ligne affichera une erreur, mais je veux une fonctionnalité semblable à cela. Cela lève une erreur avec le numéro d'erreur 50000, mais je veux que le numéro d'erreur lancé soit celui que je passe @@error
,
Je veux capturer ce numéro d'erreur au niveau du frontend.
c'est-à-dire
catch (SqlException ex)
{
if ex.number==2627
MessageBox.show("Duplicate value cannot be inserted");
}
Je veux cette fonctionnalité. qui ne peut pas être réalisée en utilisant raiseerror
. Je ne veux pas donner de message d'erreur personnalisé à l'arrière-plan.
RAISEERROR
devrait renvoyer l'erreur mentionnée ci-dessous lorsque je passe ErrorNo à lancer dans catch
Msg 2627, Niveau 14, État 1, Procédure spOTest_DomainInsert,
Ligne 14 Violation de la contrainte de clé UNIQUE 'UK_DomainCode'. Impossible d'insérer une clé en double dans l'objet 'Tags.tblDomain'. La déclaration a été terminée.
ÉDITION:
Quels pourraient être les inconvénients de ne pas utiliser de bloc try catch si je veux que l'exception soit gérée au frontend en considérant que la procédure stockée contient plusieurs requêtes qui doivent être exécutées?