10
votes

Pourquoi nous ne pouvons pas définir la valeur par défaut du paramètre DateTime dans la procédure stockée = getDate ()?

Je veux savoir pourquoi je ne peux pas définir la valeur par défaut sur le paramètre SP DateTime à getDate () comme ci-dessous: xxx

si j'essaie de sauvegarder une erreur de compilateur < / p> xxx

EDIT: Je sais que je peux le faire comme ci-dessous xxx


0 commentaires

5 Réponses :


4
votes

Vous ne pouvez pas utiliser d'appel de fonction comme valeur de paramètre par défaut.

Il est facile de travailler autour: définissez votre paramètre d'appel sur getDate () si non défini.


4 commentaires

Pourquoi je ne peux pas l'utiliser .. N'est-il pas facile de faire le moteur SQL?


Y a-t-il une explication pourquoi il ne peut pas accepter cela .. ou c'est une règle SQL Server qui ne peut pas appeler la fonction sous forme de paramètre par défaut


Ce doit être une valeur constante.


@Spacecracker La raison pour laquelle je crois est que ce que vous feriez (s'il vous suffirait de vous permettre) est d'exécuter la fonction getDate () au moment où votre code a été compilé (gardez à l'esprit que nous compilons le code) et stockons le Résultat de cette exécution de getDate () comme valeur par défaut ... quelque chose que vous ne voulez pas. Ce que vous voulez, c'est pour qu'il exécute la fonction getDate à tout moment, votre fonction de monilog est appelée, qui devrait / peut-être effectuée uniquement dans le corps de la fonction.



1
votes

En termes simples, il doit être une valeur constante et getDate () est un appel de fonction.


0 commentaires

19
votes

Si vous souhaitez utiliser le @Created comme étant par défaut, définissez NULL comme valeur de paramètre par défaut et définissez le paramètre @Created avec getDate () s'il est livré avec NULL dans votre sp.

    ...
    @CreateDate datetime = null
)
AS
    if @CreateDate is null
        set @CreateDate = getdate()
...


0 commentaires

1
votes

Vous ne pouvez pas utiliser une fonction de paramètre. Ce que je fais, c'est que j'ai défini le paramètre à une date hors de portée comme "1900-01-01", puis je le vérifie dans la proc. Par exemple: xxx


0 commentaires

3
votes
COALESCE(@CreateDate, getdate())

0 commentaires