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

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;

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.