Falsche Syntax in der Nähe von ')' beim Aufrufen der gespeicherten Prozedur mit GETDATE

120

Vielleicht habe ich einen Moment "Nachmittag", aber kann jemand erklären, warum ich bekomme

Meldung 102, Ebene 15, Status 1, Zeile 2
Falsche Syntax in der Nähe von ')'.

Beim Laufen

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

EXEC DisplayDate GETDATE();
Nat
quelle

Antworten:

169

Sie können einen Funktionsaufruf nicht als Argument an Ihre gespeicherte Prozedur übergeben. Verwenden Sie stattdessen eine Zwischenvariable:

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;
Mitch Wheat
quelle
22
Gibt es einen Grund für diese Einschränkung?
Zameer
@student Gibt es einen Grund für grundlegende Einschränkungen wie das Fehlen von booleschen und ganzzahligen Spaltentypen oder das Fehlen gefilterter Schlüssel in Oracle ...?
Skipper
20

Wie Mitch Wheat erwähnt hat, kann man eine Funktion nicht übergeben.

Wenn Sie in Ihrem Fall einen vorberechneten Wert oder GETDATE () übergeben sollten, können Sie den Standardwert verwenden. Ändern Sie beispielsweise Ihre gespeicherte Prozedur:

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

    --the SP stuff here
    SELECT @DateVar
END
GO

Und dann versuchen Sie:

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

Anmerkung : Hier habe ich angenommen, dass der NULL-Wert für diesen Parameter nicht verwendet wird. Wenn dies nicht der Fall ist, können Sie einen anderen nicht verwendeten Wert verwenden, z. B. '1900-01-01 00: 00: 00.000'.

Alexander
quelle