2012-04-05 4 views
20

Was ist die richtige Syntax hier?Verketten Nachricht in RAISERROR

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

Ich habe versucht:

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

Michael Fredrickson Antwort gibt mir einen Fehler von Incorrect syntax near 'CAST'.

Antwort

36

Sie %s als String Ersetzungsparameter in RAISERROR verwenden können:

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); 
+0

Ich bekomme einen Fehler, wenn ich versuche, 'Cast (@promostarttimestamp als varchar) 'zu sagen Inkorrekte Syntax in der Nähe von 'Cast'. Erwartet Auswahl oder ('oder wenn ich nicht 'Cast' bekomme ich bekomme' Datetime Datentyp (Parameter 4) nicht als Substitutionsparameter angeben. ' – Greg

+4

+1 für '% s', aber Sie können keine Ausdrücke (CAST) in der RAISERROR Parameter.Es muss statt 'RAISERROR (N'Code nicht gültig bis% s ', 16, 1, @ PromoStartTimestampCastedToString));' –

+0

D'oh! Danke @RemusRusanu ... sollte jetzt besser funktionieren. –