')' Yakınında yanlış sözdizimi GETDATE ile saklı yordamı çağırıyor


121

Belki bir 'öğleden sonra' yaşıyorum, ama neden aldığımı kimse açıklayabilir mi?

Msg 102, Düzey 15, Durum 1, Satır 2
Yakınında yanlış sözdizimi ')'.

Koşarken

CREATE PROC DisplayDate 
    (@DateVar DATETIME) 
AS 
BEGIN
    SELECT @DateVar
END
GO

EXEC DisplayDate GETDATE();

Yanıtlar:


170

Depolanan yordamınıza bağımsız değişken olarak bir işlev çağrısı iletemezsiniz. Bunun yerine bir ara değişken kullanın:

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;

22
Bu kısıtlamanın bir nedeni var mı?
Zameer

@ öğrenci Boole ve tamsayı sütun türlerinin olmaması veya Oracle'da filtrelenmiş anahtarların olmaması gibi temel kısıtlamaların bir nedeni var mı?
Skipper

20

As Mitch Buğday söz Eğer bir işlev geçemez.

Sizin durumunuzda önceden hesaplanmış bir değer veya GETDATE () girmeniz gerekiyorsa - varsayılan değeri kullanabilirsiniz. Örneğin, saklı yordamınızı değiştirin:

ALTER PROC DisplayDate 
(
    @DateVar DATETIME = NULL
) AS 
BEGIN
    set @DateVar=ISNULL(@DateVar,GETDATE())

    --the SP stuff here
    SELECT @DateVar
END
GO

Ve sonra şunu deneyin:

EXEC DisplayDate '2013-02-01 00:00:00.000'
EXEC DisplayDate

Açıklama : Burada NULL değerinin bu parametre için kullanımda olmadığını varsayıyorum. Sizin durumunuz değilse - başka bir kullanılmayan değer kullanabilirsiniz, örneğin '1900-01-01 00: 00: 00.000'

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.