2012-04-05 28 views
20

Burada doğru sözdizimi nedir?İleti Gönderme İletisi RAISERROR

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

denedim:

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

Michael Fredrickson cevabı bana Incorrect syntax near 'CAST'.

cevap

36

bir hata Sen RAISERROR bir dize ikame parametresi olarak %s kullanabilirsiniz verir:

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

"Cast (@promostarttimestamp varchar olarak) denediğimde hata alıyorum 'Cast' yakınında yanlış sözdizimi. Seçimi Bekliyor veya ('ya da 'Yapmadım' alıyorum' datetime veri tipini (parametre 4) bir ikame parametresi olarak belirtemezsiniz. '% S' için – Greg

+4

+1; ancak ifadeleri (CAST) kullanamazsınız. RAISERROR parametreleri: 'RAISERROR' (N'Code% s ', 16, 1, @ PromoStartTimestampCastedToString)' e kadar geçerli değildir. ' –

+0

D'oh! Teşekkürler @RemusRusanu ... şimdi daha iyi çalışmalı. –

İlgili konular