抛出错误 - 错误消息中的正确%格式化值

时间:2017-06-12 09:21:29

标签: sql-server stored-procedures throw

我正在尝试从SQL Server中的存储过程中抛出自定义错误,但在编译时遇到错误。问题很明显。我试图显示类型为bit的参数的值,我相信我的格式语句是错误的。我有以下内容:

 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;

变量@UseAlternateEquity@PushEmail的类型为bit

有人可以告诉我适当的格式类型。我搜索了高低,找不到答案

1 个答案:

答案 0 :(得分:1)

在传递它们之前,只需将@UseAlternateEquity和@PushEmail转换为其他类型。您可以像这样将它们转换为varchar或int (我在2008年,所以我可以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);