Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Попадание в промежуток дат  [new]
FieryHit
Member

Откуда:
Сообщений: 9
В общем у меня одна проблема. У меня есть таблица в которой заключаются договоры, есть поле "Дата заключения" и поле "Дата окончания". Мне нужно написать триггер который бы контролировал, что бы с одним и тем же пилотом(моя предметная область "Формула 1") в один и тот же момент времени не было заключено 2 или более контрактов. Я написал вот такой триггер, но он работает, мягко говоря не совсем корректно... В общем кто что может плз подскажите, буду благодарен)))
автор

AS
BEGIN
SET NOCOUNT ON;
declare @zakluchenie datetime
declare @okonchanie datetime
declare @pilot int
declare @n datetime
declare @o datetime
select @zakluchenie=Дата_заключения_контракта,@okonchanie=Дата_окончания_контракта,@pilot=Код_Пилота from inserted
SELECT @n=Дата_заключения_контракта,@o= Дата_окончания_контракта
FROM Контракты
WHERE (Код_Пилота = @pilot)
if @zakluchenie BETWEEN @n AND @o
begin
ROLLBACK
print 'Ошибка в дате заключения'
end
else
if @okonchanie BETWEEN @n AND @o
begin
ROLLBACK
print 'Ошибка в дате окончания'
end
if ((@zakluchenie<@n) AND(@okonchanie>@o))
begin
ROLLBACK
print 'Ошибка!'
end
END]
16 май 11, 18:55    [10660720]     Ответить | Цитировать Сообщить модератору
 Re: Попадание в промежуток дат  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
Пара часов тому назад
16 май 11, 18:58    [10660738]     Ответить | Цитировать Сообщить модератору
 Re: Попадание в промежуток дат  [new]
FieryHit
Member

Откуда:
Сообщений: 9
Ок, ща попробую))
16 май 11, 19:06    [10660774]     Ответить | Цитировать Сообщить модератору
 Re: Попадание в промежуток дат  [new]
iljy
Member

Откуда:
Сообщений: 8711
FieryHit,

create trigger .... on ... instead of insert
as
  if exists(
	select * from inserted i join Tbl t
		 on i.Code = t.code and i.beg_date < t.end_date and t.beg_date < i.end_date 
	)
	 АТАС!
  else
    insert ...

16 май 11, 19:06    [10660775]     Ответить | Цитировать Сообщить модератору
 Re: Попадание в промежуток дат  [new]
FieryHit
Member

Откуда:
Сообщений: 9
Не не то, все равно не правильно происходит проверка)
16 май 11, 19:42    [10660923]     Ответить | Цитировать Сообщить модератору
 Re: Попадание в промежуток дат  [new]
iljy
Member

Откуда:
Сообщений: 8711
FieryHit
Не не то, все равно не правильно происходит проверка)

Что именно не то?
16 май 11, 19:58    [10660997]     Ответить | Цитировать Сообщить модератору
 Re: Попадание в промежуток дат  [new]
FieryHit
Member

Откуда:
Сообщений: 9
iljy, мне надо что бы проверялось не просто попадание, а вообще наложение отрезков(полное или частичное) + у меня все эти данные из одной таблицы)
16 май 11, 20:00    [10661017]     Ответить | Цитировать Сообщить модератору
 Re: Попадание в промежуток дат  [new]
iljy
Member

Откуда:
Сообщений: 8711
FieryHit
iljy, мне надо что бы проверялось не просто попадание, а вообще наложение отрезков(полное или частичное) + у меня все эти данные из одной таблицы)

Для проверки наложения замените неравенства на нестрогие. А одна таблица тут при чем?
16 май 11, 20:09    [10661061]     Ответить | Цитировать Сообщить модератору
 Re: Попадание в промежуток дат  [new]
FieryHit
Member

Откуда:
Сообщений: 9
iljy
FieryHit
iljy, мне надо что бы проверялось не просто попадание, а вообще наложение отрезков(полное или частичное) + у меня все эти данные из одной таблицы)

Для проверки наложения замените неравенства на нестрогие. А одна таблица тут при чем?

Ну значит я не правильно понял этот кусок кода
автор
i join Tbl t
on i.Code = t.code
16 май 11, 20:20    [10661105]     Ответить | Цитировать Сообщить модератору
 Re: Попадание в промежуток дат  [new]
iljy
Member

Откуда:
Сообщений: 8711
FieryHit
Ну значит я не правильно понял этот кусок кода
автор
i join Tbl t
on i.Code = t.code

Я вам схему накидал, вы уж имена таблиц-полей на свои замените.
16 май 11, 20:21    [10661113]     Ответить | Цитировать Сообщить модератору
 Re: Попадание в промежуток дат  [new]
FieryHit
Member

Откуда:
Сообщений: 9
iljy, не ну это понятно, походу я не понял...) ща попробую еще раз)
16 май 11, 20:23    [10661129]     Ответить | Цитировать Сообщить модератору
 Re: Попадание в промежуток дат  [new]
FieryHit
Member

Откуда:
Сообщений: 9
iljy, либо я тупой, либо это не то, потому что она мне везде выбивает ошибку + как я понял нет уточнения, контракты какого гонщика стоит сравнивать.
16 май 11, 20:47    [10661198]     Ответить | Цитировать Сообщить модератору
 Re: Попадание в промежуток дат  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
FieryHit
iljy, либо я тупой, либо это не то, потому что она мне везде выбивает ошибку + как я понял нет уточнения, контракты какого гонщика стоит сравнивать.
Вы бы свой код, что ли, показали.
16 май 11, 21:01    [10661231]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить