2012-04-05 14 views
20

Qual è la sintassi corretta qui?Concatena messaggio in RAISERROR

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

ho provato:

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

Michael Fredrickson mi dà un errore di Incorrect syntax near 'CAST'.

risposta

36

È possibile utilizzare %s come parametro di sostituzione di stringhe in RAISERROR:

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

Ottengo un errore quando provo a 'Cast (@promostarttimestamp come varchar)' dì ing 'sintassi errata vicino a 'Cast'. Aspettando Select o ('o quando non' Cast' ottengo 'Non posso specificare il tipo di dati datetime (parametro 4) come parametro di sostituzione. – Greg

+4

+1 per'% s', ma non è possibile usare le espressioni (CAST) nel Parametri RAISERROR: deve essere isntead 'RAISERROR (N'Code non valido fino a% s ', 16, 1, @ PromoStartTimestampCastedToString))' –

+0

D'oh! Grazie a @RemusRusanu ... dovrebbe funzionare meglio ora. –