我有一个名为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)'? – 2013-02-22 13:37:38
任何触发器wirtten在其中您将插入或删除的值设置为标量变量是错误的。它不会正确处理多行插入,更新或删除。你永远不能认为这些不会发生。 – HLGEM 2013-02-22 15:28:50
除了多行处理问题,您可能不会考虑tblReservations中有许多行针对特定的apt ID。 – HLGEM 2013-02-22 15:30:40