Funzione SQL come valore predefinito del parametro?

Ho provato a cambiare un valore predefinito del parametro con questo:

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

e tutti SQL pre-compilatore mi ha dato è stato questo errore:

Msg 102, Livello 15, Stato 1, Procedura my_sp, Linea 8 sintassi non corretta in prossimità di ‘(‘.

Ho già creato la procedura. (Non so se questo è rilevante.) Stavo usando un valore predefinito null e controllo per dopo, ma non mi sembra corretto. Posso fare questo in una sola riga?


Aggiornamento: stavo andando fuori di MSDN descrizione dei parametri di stored procedure:

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

Nota:
Di Default i valori dei parametri possono essere specificati per le funzioni CLR tranne che per il tipo di dati varchar(max), varbinary(max) tipi di dati.

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

Sto leggendo sbagliato?

Molte grazie.

InformationsquelleAutor user58044 | 2009-01-22

 

6 Replies
  1. 145

    Valore di Default per le stored procedure parametro deve essere costanti.
    Si avrebbe bisogno di fare il seguente…

    ALTER Procedure [dbo].[my_sp]
    @currentDate datetime = null
    AS
    IF @currentDate is null
    SET @currentDate = getdate()
    • o SET @datacorrente = COALESCE(@dataodierna,GETDATE())
    • Stavo usando in precedenza. “Ero con un valore predefinito null e controllo per più tardi, ma non mi sembra corretto.” Ancora grazie Brian.
    • Questa soluzione è perfetta.
  2. 32

    Non credo che sia possibile, è necessario utilizzare un valore letterale di valore (costante) come predefinito.

    Tuttavia, si può fare questo:

    Set @currentDate = Coalesce(@currentDate , GetDate())
  3. 12

    Si può provare come segue:

    Set @CurrentDate=IsNull(@CurrentDate,GetDate())
  4. 7

    Deduco si utilizza Microsoft SQL Server da parentesi quadre nel tuo esempio.

    Da MSDN:

    Solo un valore costante, come un
    stringa di caratteri, una funzione scalare
    (un sistema, definito dall’utente, o CLR
    funzione); o NULL può essere utilizzato come un
    default.

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

Lascia un commento