')' 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.