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.

Était-ce utile?

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
scroll top