Définir des valeurs variables
-
05-07-2019 - |
Question
Je suis sûr que c'est quelque chose de simple, mais je n'arrive pas à comprendre. Pourquoi ce code ne fonctionne-t-il pas?
DECLARE @FirstSaturday DATETIME
DECLARE @ENDDATE DATETIME
SELECT @FirstSaturday = min(RED1.DATE)
FROM REDFRIDAYDATES..TBLREDFRIDAYALLDATES RED1
WHERE Period = 9 AND year = 2009
SELECT CASE
WHEN getdate() < @FirstSaturday
THEN set @ENDDATE = getdate()
ELSE SET @enddate = @FirstSaturday
END
Je souhaite simplement que la valeur de la date antérieure, aujourd’hui ou à la fin de la période, soit affectée à @enddate.
Quelqu'un peut-il me diriger dans la bonne direction? J'utilise SQL 2000.
La solution
Le SELECT CASE
n'a aucun sens, essayez: -
DECLARE @FirstSaturday DATETIME
DECLARE @ENDDATE DATETIME
SELECT @FirstSaturday = min(RED1.DATE)
FROM REDFRIDAYDATES..TBLREDFRIDAYALLDATES RED1
WHERE Period = 9 AND year = 2009
SELECT @ENDDATE = CASE
WHEN getdate() < @FirstSaturday
THEN getdate()
ELSE @FirstSaturday
END
Autres conseils
SELECT @enddate = CASE
WHEN getdate() < @FirstSaturday THEN getdate()
ELSE @FirstSaturday
END
CASE dans T-SQL est une expression (comme ?:
en C), pas une branche de contrôle de flux comme IF
.
Ajoutez le mot clé "End" à la fin de l'instruction Case
DECLARE @FirstSaturday DATETIME
DECLARE @ENDDATE DATETIME
SELECT @FirstSaturday = min(RED1.DATE)
FROM REDFRIDAYDATES..TBLREDFRIDAYALLDATES RED1
WHERE Period = 9
AND year = 2009
SELECT @ENDDATE =
Case
WHEN getdate() < @FirstSaturday
THEN getdate()
ELSE @FirstSaturday
End
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow