在RAISERROR中连接消息

Gre*_*reg 30 sql sql-server sql-server-2008

这里的语法是什么?

If (@timestamp < (Select PromoStartTimestamp From @promo))
    RAISERROR('Code not valid until ' + (Select PromoStartTimestamp From @promo)
              ,16
              ,1);
Run Code Online (Sandbox Code Playgroud)

我试过了:

If (@timestamp < (Select PromoStartTimestamp From @promo))
    RAISERROR(N'Code not valid until @starttimestamp'
              ,16
              ,1
              ,(Select PromoStartTimestamp From @promo));
Run Code Online (Sandbox Code Playgroud)

Mic*_*son 53

您可以%sRAISERROR以下位置用作字符串替换参数:

DECLARE @PromoStartTimestamp DATETIME
DECLARE @PromoStartTimestampString VARCHAR(50)

SELECT @PromoStartTimestamp = PromoStartTimestamp From @promo
SELECT @PromoStartTimestampString = CAST(@PromoStartTimestamp AS VARCHAR)

If (@timestamp < @PromoStartTimestamp)
    RAISERROR(N'Code not valid until %s'
              ,16
              ,1
              ,@PromoStartTimestampString);
Run Code Online (Sandbox Code Playgroud)

  • '%s`为+1,但不能在RAISERROR参数中使用表达式(CAST).它必须是'RAISERROR(N'Code无效,直到%s',16,1,@ PromoStartTimestampCastedToString)); (4认同)
  • 您还可以添加多个变量,例如RAISERROR('Order%s没有任何%s.',16,1,@ SalesOrderNo,@ CurrentItemNr); (2认同)