Funzione SQL come valore del parametro predefinito?


105

Ho provato a modificare un valore di parametro predefinito con questo:

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

e tutto il pre-compilatore SQL mi ha dato era questo errore:

Msg 102, livello 15, stato 1, procedura my_sp, riga 8 Sintassi non corretta vicino a '('.

Ho già creato la procedura. (Non sono sicuro che sia rilevante.) Stavo usando un valore predefinito nullo e lo controllavo in seguito, ma non sembra corretto. Posso farlo in una riga?


Aggiornamento: stavo uscendo dalla descrizione di MSDN dei parametri della procedura memorizzata :

[= predefinito] È un valore predefinito per il parametro. Se viene definito un valore predefinito, la funzione può essere eseguita senza specificare un valore per quel parametro.

Nota:
i valori dei parametri predefiniti possono essere specificati per le funzioni CLR ad eccezione dei tipi di dati varchar (max) e varbinary (max).

Quando un parametro della funzione ha un valore predefinito, la parola chiave DEFAULT deve essere specificata quando la funzione viene chiamata per recuperare il valore predefinito. Questo comportamento è diverso dall'utilizzo di parametri con valori predefiniti nelle stored procedure in cui l'omissione del parametro implica anche il valore predefinito.

Sto leggendo questo sbagliato?

Grazie molto.

Risposte:


160

Il valore predefinito per il parametro delle stored procedure deve essere costanti . Dovresti fare quanto segue ...

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

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

Lo stavo usando in precedenza. "Stavo usando un valore predefinito nullo e l'ho verificato in seguito, ma non mi sembra corretto." Grazie ancora Brian.
user58044

Questa soluzione è perfetta.
R.Katnaan

35

Non penso che sia possibile, devi usare un valore letterale (costante) come predefinito.

Tuttavia puoi farlo:

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

13

Puoi provare come segue:

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

8

Deduco che stai usando Microsoft SQL Server dalle parentesi quadre nel tuo esempio.

Da MSDN :

Solo un valore costante, come una stringa di caratteri; una funzione scalare (una funzione di sistema, definita dall'utente o CLR); o NULL può essere utilizzato come impostazione predefinita.

La funzione GETDATE()restituisce di volta in volta un valore diverso, quindi non è un'espressione costante.


2

Quel valore non è deterministico e non può essere utilizzato


0

Suggerimento:

Imposta il valore predefinito su NULL

Eseguire l'impostazione predefinita GETDATE()nel front-end.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.