2012-04-05 14 views
20

Jaka jest tutaj poprawna składnia?Skonsultuj wiadomość w RAISERROR

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

Próbowałem:

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

Michaela Fredrickson daje mi błąd o Incorrect syntax near 'CAST'.

Odpowiedz

36

Można użyć %s jako parametr substytucji ciąg w 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

Wystąpił błąd podczas próby "Cast (@promostarttimestamp jako varchar)" In 'Nieprawidłowa składnia w pobliżu 'Cast'. Oczekiwano Wyboru lub ('lub gdy nie 'Cast' otrzymuję' Nie można określić typu danych datetime (parametr 4) jako parametru podstawienia. " – Greg

+4

+1 dla'% s', ale nie można używać wyrażeń (CAST) w Parametry RAISERROR. Musi to być isntead 'RAISERROR (N'Code nie jest ważny do% s ', 16, 1, @ PromoStartTimestampCastedToString));' –

+0

D'oh! Dzięki @RemusRusanu ... powinien teraz działać lepiej. –