Fonction SQL comme valeur de paramètre par défaut?
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 le pré-compilateur SQL m'a donné 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 c'est pertinent.) J'utilisais une valeur par défaut nulle et vérifiais cela plus tard, mais cela ne semble pas correct. Puis-je le faire en une seule ligne?
Mise à jour: j'allais hors de description MSDN des paramètres de procédure stockés :
[=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 de valeur pour ce paramètre.
Remarque:
Les valeurs des paramètres par défaut 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 dans lesquelles l'omission du paramètre implique également la valeur par défaut.
Suis-je mal lu?
Merci beaucoup.
6 réponses
La valeur par défaut du paramètre procédures stockées doit être constantes. Vous devez faire ce qui suit...
ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()
Je ne pense pas que ce soit possible, vous devez utiliser une valeur littérale (constante) par défaut.
Cependant, vous pouvez faire ceci:
Set @currentDate = Coalesce(@currentDate , GetDate())
, Vous pouvez essayer comme suit:
Set @CurrentDate=IsNull(@CurrentDate,GetDate())
Je déduis que vous utilisez Microsoft SQL Server à partir des crochets de votre exemple.
À Partir de MSDN:
Seulement une valeur constante, telle qu'un chaîne de caractères, une fonction scalaire (soit un système, défini par l'utilisateur, ou CLR fonction); ou NULL peut être utilisé comme défaut.
La fonction GETDATE()
renvoie une valeur différente de temps en temps, ce n'est donc pas une expression constante.
Cette valeur n'est pas déterministe et ne peut pas être utilisée
Suggestion:
Définissez la valeur par défaut sur NULL
Faites le GETDATE()
par défaut dans le frontal.