Niepoprawna składnia w pobliżu „)” wywołująca procedurę składowaną z GETDATE

121

Może mam chwilę „popołudnia”, ale czy ktoś może wyjaśnić, dlaczego tak się stało

Msg 102, poziom 15, stan 1, wiersz 2
Niepoprawna składnia w pobliżu „)”.

Podczas biegania

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

EXEC DisplayDate GETDATE();
Nat
źródło

Odpowiedzi:

170

Nie możesz przekazać wywołania funkcji jako argumentu do procedury składowanej. Zamiast tego użyj zmiennej pośredniej:

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;
Mitch Wheat
źródło
22
Czy istnieje powód tego ograniczenia?
Zameer
@student Czy istnieje powód dla podstawowych ograniczeń, takich jak brak typów kolumn typu boolean i integer lub brak filtrowanych kluczy w Oracle ...?
Skipper
20

Jak wspomniał Mitch Wheat , nie możesz przekazać funkcji.

Jeśli w twoim przypadku powinieneś podać wstępnie obliczoną wartość lub GETDATE () - możesz użyć wartości domyślnej. Na przykład zmodyfikuj swoją procedurę składowaną:

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

    --the SP stuff here
    SELECT @DateVar
END
GO

A potem spróbuj:

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

Uwaga : tutaj przypuszczałem, że wartość NULL nie jest używana dla tego parametru. Jeśli to nie Twój przypadek - możesz użyć innej nieużywanej wartości, na przykład „1900-01-01 00: 00: 00.000”

Alexander
źródło