2010-03-08 6 views
75

Vielleicht habe ich einen Moment der 'Nachmittag', aber kann jemand erklären, warum ichfalsche Syntax nahe ')' Aufruf storedproc mit GETDATE

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

Wenn

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

GO 

EXEC DisplayDate GETDATE(); 

Antwort

107

laufen Sie können nicht als Argument für Ihre gespeicherte Prozedur in einem Funktionsaufruf übergeben. Statt eine Zwischengröße verwenden:

DECLARE @tmp DATETIME 
SET @tmp = GETDATE() 

EXEC DisplayDate @tmp; 
+6

Gibt es einen Grund für diese Einschränkung? – xameeramir

14

Als Mitch Wheat Sie erwähnt nicht eine Funktion übergeben können.

Wenn in Ihrem Fall sollten Sie einen vorberechneten Wert oder GETDATE() übergeben - Sie können 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:

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

Bemerkung: Hier soll ich, dass NULL-Wert für diesen Parameter nicht in Gebrauch ist. Wenn dies nicht der Fall ist, können Sie einen anderen nicht verwendeten Wert verwenden, z. B. "1900-01-01 00: 00: 00.000"