SQL-Auftrag und Datetime-Parameter
-
01-10-2019 - |
Frage
Ein weiterer Entwickler erstellt eine gespeicherte Prozedur, die jeden Monat als SQL-Job ausgeführt wird eingerichtet. Es nimmt einen Parameter für Datum und Uhrzeit. Wenn ich versuche, es in den Job aufzurufen oder in nur einem Abfragefenster bekomme ich einen Fehler Incorrect syntax near ')'
. Der Aufruf, es auszuführen ist:
exec CreateHeardOfUsRecord getdate()
Wenn ich ihm hart codierte Datum wie exec CreateHeardOfUsRecord '4/1/2010'
gebe es funktioniert gut. Jede Idee, warum kann ich nicht getdate()
in diesem Zusammenhang verwenden? Danke.
Lösung
übergebenen Parameter mit Exec müssen entweder Konstanten oder Variablen sein . GetDate () wird als Funktion eingestuft. Sie müssen eine Variable deklarieren das Ergebnis GetDate () zu halten, dann gibt sie an die gespeicherte Prozedur.
Der angegebene Wert muss eine Konstante sein oder eine Variable; Sie können nicht angeben, ein Funktionsnamen als Parameterwert. Variablen können vom Benutzer definiert werden oder Systemvariablen wie @@ spid.
Andere Tipps
, indem Sie auf EXECUTE (Transact-SQL)
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
Sie können nur in einem konstanten Wert übergeben oder eine Variable oder die Klausel DEFAULT
probieren Sie es aus:
create procedure xy_t
@p datetime
as
select @p
go
exec xy_t GETDATE()
Ausgabe:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ')'.
Versuchen Sie konvertieren vorbei (varchar, GetDate (), 101)
Mit Km Code hier ist ein Weg, es zu tun
create procedure xy_t
@p datetime
as
select @p
go
declare @date datetime
set @date = getdate()
exec xy_t @date