你好,为了业余爱好的目的,我试图用MS SQL Server数据库创建一个C#应用程序,它重新组合一个酒店系统。我现在正试图创建一个SQL触发器,它可以计算一个过期的差异。预订时间不得超过6周(42天)。然而,即使差异为1天,即使预订时间差低于42天,我的触发也会消失。所以我不确定我做错了什么。触发器计数datediff
我的触发器:
create trigger trigger_reservation
on reservation
after update, insert
as
if exists
(
select reservationid, DATEDIFF(dd,Startdate,Enddate)
from reservation
group by reservationid, enddate, startdate
having DATEDIFF(dd,Startdate,Enddate) > 42
)
begin
raiserror('Error: Reservation may not be longer than 6 weeks',16, 1)
rollback transaction
end
当然你的触发器正在检查整个表,而不仅仅是你插入的行?如果您在数据表中已经有超过42天的预留,那么触发器将始终激活。 –
你是对的,确实有一些超过42天的预留(随机生成的数据)。我将如何解决这个问题? – glnxhjeh
基本上,您需要知道您在触发器中可以访问的“特殊”表格,您希望在此处“插入”的表格。我看到peterm已经更新了他的答案,并且它应该按照您的要求工作...... –