Fonction SQL comme valeur de paramètre par défaut?

105

J'ai essayé de changer une valeur de paramètre par défaut avec ceci:

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

et tout ce que le pré-compilateur SQL m'a donné était cette erreur:

Msg 102, niveau 15, état 1, procédure my_sp, ligne 8 Syntaxe incorrecte près de '('.

J'ai déjà créé la procédure. (Je ne sais pas si cela est pertinent.) J'utilisais une valeur par défaut nulle et je la vérifiais plus tard, mais cela ne semble pas approprié. Puis-je faire cela en une seule ligne?


Mise à jour: je sortais de la description de MSDN des paramètres de procédure stockée :

[= valeur par défaut] Est une valeur par défaut pour le paramètre. Si une valeur par défaut est définie, la fonction peut être exécutée sans spécifier de valeur pour ce paramètre.

Remarque:
Les valeurs de paramètre par défaut peuvent être spécifiées pour les fonctions CLR, à l'exception des types de données varchar (max) et varbinary (max).

Lorsqu'un paramètre de la fonction a une valeur par défaut, le mot clé DEFAULT doit être spécifié lorsque la fonction est appelée pour récupérer la valeur par défaut. Ce comportement est différent de l'utilisation de paramètres avec des valeurs par défaut dans des procédures stockées dans lesquelles l'omission du paramètre implique également la valeur par défaut.

Est-ce que je lis mal?

Merci beaucoup.

user58044
la source

Réponses:

160

La valeur par défaut du paramètre des procédures stockées doit être des constantes . Vous auriez besoin de faire ce qui suit ...

ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()
Brian Kim
la source
36
ou SET @currentDate = COALESCE (@ currentDate, GETDATE ())
SQLMenace
J'utilisais cela auparavant. "J'utilisais une valeur par défaut nulle et je vérifiais cela plus tard, mais cela ne semble pas approprié." Merci encore Brian.
user58044
Cette solution est parfaite.
R.Katnaan
35

Je ne pense pas que ce soit possible, vous devez utiliser une valeur littérale (constante) par défaut.

Cependant, vous pouvez le faire:

Set @currentDate = Coalesce(@currentDate , GetDate())
Otávio Décio
la source
13

Vous pouvez essayer comme suit:

Set @CurrentDate=IsNull(@CurrentDate,GetDate())
R.Katnaan
la source
8

J'en déduis que vous utilisez Microsoft SQL Server à partir des crochets dans votre exemple.

Depuis MSDN :

Seule une valeur constante, telle qu'une chaîne de caractères; une fonction scalaire (soit une fonction système, définie par l'utilisateur ou CLR); ou NULL peut être utilisé par défaut.

La fonction GETDATE()renvoie une valeur différente de temps en temps, ce n'est donc pas une expression constante.

Bill Karwin
la source
2

Cette valeur n'est pas déterministe et ne peut pas être utilisée

SQLMenace
la source
0

Suggestion:

Définissez la valeur par défaut sur NULL

Faites la valeur par défaut GETDATE()dans le front-end.

MarlonRibunal
la source