100 votes

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

J'ai essayé de modifier 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 suis pas sûr que cela soit pertinent.) J'utilisais une valeur par défaut nulle et vérifiais cela plus tard, mais cela ne semble pas approprié. Puis-je faire cela en une seule ligne ?


Mise à jour : Je me basais sur la description de MSDN des paramètres de procédure stockée : lien

[ = default ] 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 une valeur pour ce paramètre.

Note:
Les valeurs par défaut des paramètres peuvent être spécifiées pour les fonctions CLR sauf pour les 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 les procédures stockées où l'omission du paramètre implique également la valeur par défaut.

Est-ce que je lis mal ?

Merci beaucoup.

153voto

Brian Kim Points 8951

La valeur par défaut des paramètres des procédures stockées doit être des constantes. Vous devriez faire ce qui suit...

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

32voto

Otávio Décio Points 44200

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

Cependant, vous pouvez le faire:

Définir @currentDate = Coalesce(@currentDate , GetDate())

14voto

Vous pouvez essayer comme suit:

Définir @CurrentDate=IsNull(@CurrentDate,GetDate())

7voto

Bill Karwin Points 204877

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

De MSDN:

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

La fonction GETDATE() renvoie une valeur différente à chaque fois, elle n'est donc pas une expression constante.

2voto

SQLMenace Points 68670

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X