SQL-Funktion als Standardparameterwert?


105

Ich habe versucht, einen Standardparameterwert folgendermaßen zu ändern:

ALTER PROCEDURE [dbo].[my_sp]
@currentDate datetime = GETDATE()

und alles, was der SQL-Pre-Compiler mir gab, war dieser Fehler:

Meldung 102, Ebene 15, Status 1, Prozedur my_sp, Zeile 8 Falsche Syntax in der Nähe von '('.

Ich habe die Prozedur bereits erstellt. (Ich bin nicht sicher, ob das relevant ist.) Ich habe einen Standardwert von Null verwendet und später danach gesucht, aber das scheint nicht richtig zu sein. Kann ich das in einer Zeile machen?


Update: Ich habe die MSDN-Beschreibung der Parameter für gespeicherte Prozeduren verlassen :

[= Standard] Ist ein Standardwert für den Parameter. Wenn ein Standardwert definiert ist, kann die Funktion ausgeführt werden, ohne einen Wert für diesen Parameter anzugeben.

Hinweis:
Für CLR-Funktionen können Standardparameterwerte angegeben werden, mit Ausnahme der Datentypen varchar (max) und varbinary (max).

Wenn ein Parameter der Funktion einen Standardwert hat, muss beim Aufruf der Funktion das Schlüsselwort DEFAULT angegeben werden, um den Standardwert abzurufen. Dieses Verhalten unterscheidet sich von der Verwendung von Parametern mit Standardwerten in gespeicherten Prozeduren, bei denen das Weglassen des Parameters auch den Standardwert impliziert.

Lese ich das falsch

Danke vielmals.

Antworten:


160

Der Standardwert für den Parameter für gespeicherte Prozeduren muss Konstanten sein . Sie müssten Folgendes tun ...

ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()

36
oder SET @currentDate = COALESCE (@ currentDate, GETDATE ())
SQLMenace

Ich habe das vorher benutzt. "Ich habe einen Standardwert von Null verwendet und später danach gesucht, aber es scheint nicht richtig zu sein." Trotzdem danke Brian.
user58044

Diese Lösung ist perfekt.
R. Katnaan

35

Ich denke nicht, dass das möglich ist, Sie müssen einen Literalwert (Konstantenwert) als Standard verwenden.

Sie können dies jedoch tun:

Set @currentDate = Coalesce(@currentDate , GetDate())

13

Sie können Folgendes versuchen:

Set @CurrentDate=IsNull(@CurrentDate,GetDate())

8

Ich schließe aus den eckigen Klammern in Ihrem Beispiel, dass Sie Microsoft SQL Server verwenden.

Von MSDN :

Nur ein konstanter Wert, z. B. eine Zeichenfolge; eine Skalarfunktion (entweder eine System-, benutzerdefinierte oder CLR-Funktion); oder NULL kann standardmäßig verwendet werden.

Die Funktion GETDATE()gibt von Zeit zu Zeit einen anderen Wert zurück, sodass es sich nicht um einen konstanten Ausdruck handelt.


2

Dieser Wert ist nicht deterministisch und kann nicht verwendet werden


0

Vorschlag:

Setzen Sie die Standardeinstellung auf NULL

Machen Sie den Standard GETDATE()im Frontend.

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.