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();

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;

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”

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.