我被困在这个问题上,我想防止发生重复预订。这是我一直在使用的代码:防止SQL中的重复预订
USE INL5
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trg_bookinginfo_doublebooking] ON [dbo].[bookinginfo]
FOR INSERT AS
DECLARE @startdate AS DATE
DECLARE @enddate AS DATE
DECLARE @roomnumber AS CHAR(3)
SELECT @startdate = inserted.startdate, @enddate = inserted.enddate, @roomnumber = inserted.roomnumber
FROM inserted, bookinginfo
WHERE @roomnumber = bookinginfo.roomnumber AND (@startdate BETWEEN bookinginfo.startdate AND bookinginfo.enddate) AND (@enddate BETWEEN bookinginfo.startdate AND bookinginfo.enddate)
IF EXISTS(SELECT * FROM inserted)
BEGIN RAISERROR ('Double bookings are not allowed',16,1)
ROLLBACK TRANSACTION
END
的问题是,错误发生的日期是否被重叠。我究竟做错了什么?
我试过最后一部分,但它仍然无法正常工作。现在的问题是,双重预订不会发生任何错误。你知道这可能是什么原因吗? – user3428812 2015-01-21 12:50:01
我通过在instnddate> = bi.startdate之后将ON.BookinginfoID <> bi.BookinginfoID添加到ON语句来解决此问题。谢谢您的帮助。 – user3428812 2015-01-21 13:20:24
@ user3428812。 。 。是的,这也是绝对需要的。 – 2015-01-21 20:51:18