Установить значения переменных - PullRequest
1 голос
/ 10 сентября 2009

Я уверен, что это что-то простое, но я не могу понять это. Почему этот код не работает?

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

Я просто хочу, чтобы значение более ранней даты, сегодня или конца периода, было присвоено @enddate.

Может ли кто-нибудь указать мне правильное направление? Я использую SQL 2000.

Ответы [ 3 ]

3 голосов
/ 10 сентября 2009
SELECT @enddate = CASE
WHEN getdate() < @FirstSaturday THEN  getdate()
ELSE  @FirstSaturday
END

CASE в T-SQL - это выражение (например, ?: в C), а не ветвь управления потоком, как IF.

1 голос
/ 10 сентября 2009

SELECT 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
1 голос
/ 10 сентября 2009

Добавьте ключевое слово 'End' в конец оператора 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
...