2017-06-12 5 views
0

J'essaie de lancer une erreur personnalisée à partir de ma procédure stockée dans SQL Server, mais une erreur se produit lors de la compilation. Le problème est clair. J'essaye d'afficher la valeur d'un paramètre de type bit et je crois que ma déclaration de format est fausse. Je donne les résultats suivants:Erreurs de lancement - Les valeurs correctes de mise en forme% dans le message d'erreur

EXEC sys.sp_addmessage 
    @msgnum = 60000 
    ,@severity = 16 
    ,@msgText = N'Bad parameter. You cannot pass NULLs to this procedure, UseAlternateEquity (%i), AlternateEquity (%d), PushEmail (%i)' 
        ,@lang  = NULL; 

declare @msg1 NVARCHAR(2048) = FORMATMESSAGE(60000, @UseAlternateEquity, @AlternateEquity, @PushEmail); 
throw 60000, @msg1, 1; 

Les variables @UseAlternateEquity et @PushEmail sont de type bit

Quelqu'un pourrait-il me dire quel est le type de format approprié est s'il vous plaît. J'ai recherché haut et bas et ne peux pas trouver la réponse

Répondre

1

Juste cast votre @UseAlternateEquity et @PushEmail à un autre type avant de les passer. Vous pouvez les jeter à VARCHAR ou int comme celui-ci (je suis sur le 2008 je peux RAISERROR)

declare @UseAlternateEquityand bit = 1, 
      @PushEmailare bit = 0, 
      @AlternateEquity bit = 1; 

    declare @UseAlternateEquityand_1 int = @UseAlternateEquityand, 
      @PushEmailare_1 int = @PushEmailare, 
      @AlternateEquity_1 int = @AlternateEquity; 

    RAISERROR (N'Bad parameter. You cannot pass NULLs to this procedure, UseAlternateEquity (%u), AlternateEquity (%u), PushEmail (%u)', 
       16, 
       1, 
       @UseAlternateEquityand_1, 
       @AlternateEquity_1, 
       @PushEmailare_1); 
+0

Merci. J'ai fini par utiliser convert (int, @var) en passant les variables. –