У меня есть таблица под названием tblReservations
с follwing столбцами:Триггер SQL Server 2008 не работает, почему?
reserv_ID (int), aptID (int), client_ID (int),
start_date (datetime), end_date (datetime),
details (nvarchar(max)), confirmation (bit)
Что триггер, чтобы сравнить две даты start_date
новых отелей и end_date
существующих в резервации tblReservation
для конкретного aptID
.
Если start_date < end_date
триггер должен предотвратить внесение нового бронирования для этого aptID
.
Я написал этот триггер:
CREATE TRIGGER NewReservation
on tblReservations
after insert
as
begin
declare @aptID int
declare @start_date datetime
declare @end_date datetime
select @aptID=aptID, @start_date=start_date from inserted
select @end_date=end_date from tblReservations
where [email protected]
if @end_date>@start_date
BEGIN
ROLLBACK TRANSACTION
END
end
Почему этот триггер не работает?
пожалуйста, помогите
Не можете ли вы использовать контрольное ограничение 'CHECK (start_date <= end_date)'? –
любой триггер wirtten, где вы устанавливаете значения из вставленных или удаленных в скалярные переменные, неверен. Он не будет корректно обрабатывать многострочные вставки, обновления или удаления. Вы никогда не можете предположить, что этого не произойдет. – HLGEM
Помимо многострочной проблемы, вы, вероятно, не считаете, что в tblReservations имеется много строк для определенного идентификатора apt. – HLGEM