2015-05-24 4 views
1
IF (SELECT begin_date FROM reservation WHERE [email protected]) <[email protected]_date 
AND 
(SELECT end_date FROM reservation WHERE [email protected]) >= @begin_date 
BEGIN 
    PRINT 'already reserved' 
    RETURN 
END 

Это оператор IF в моей хранимой процедуре. У меня есть несколько резервирований, и я хочу проверить, не пересекаются ли они с тем, который я хочу добавить. Проблема в том, как сравнить несколько значений, возвращаемых запросом с переменной?Подзапрос T-SQL возвращает более 1 значения

+0

Вы должны поместить 'MIN' или' MAX' на begin_date и end_date. – RubahMalam

+0

Но я хочу сравнить его со всеми будущими оговорками, а не только один –

+0

Попробуйте мой ответ ниже? – RubahMalam

ответ

2

Если ваша логика «уже зарезервирован» правильно на основе запроса, то это должно делать то, что вы хотите

IF EXISTS (SELECT * 
      FROM reservation rsv1 
      WHERE [email protected] 
      AND rsv1.begin_date <[email protected]_date 
      AND rsv1.end_date >= @begin_date) 
BEGIN 
PRINT 'already reserved' 
END 
+0

Добро пожаловать @TomaszKal – BICube

0

Вы должны установить MIN или MAX на begin_date и end_date. что-то вроде этого:

IF (SELECT MIN(begin_date) FROM reservation WHERE [email protected]) <[email protected]_date 
AND 
(SELECT MAX(end_date) FROM reservation WHERE [email protected]) >= @begin_date 
BEGIN 
    PRINT 'already reserved' 
    RETURN 
END 
+0

Что делать, если можно зарезервировать время между началом первого события и окончанием последнего события, уже сохраненного в базе данных? – BICube