gpt4 book ai didi

sql - SQL Server 2008 中唯一的日期范围字段

转载 作者:行者123 更新时间:2023-12-02 22:32:27 25 4
gpt4 key购买 nike

我有一个表,其中包含两个名为 StartTime 和 EndTime 的字段。两者都是 TIME 字段。

我想添加一个约束,以防止插入与预先存在的时间范围重叠的任何记录。例如。如果 StartTime = 5:00、EndTime = 10:00 的记录已存在,我希望 StartTime = 6:00、EndTime = 9:00 的插入由于重叠而失败。

有没有办法可以实现这一点,无论有没有触发器?

最佳答案

下面的触发器应该可以工作 - 也可以通过检查约束来执行此操作,但 this post 中显示的逻辑有点头疼。

CREATE TRIGGER [dbo].[DateRangeTrigger]
ON [dbo].[TargetTable]
FOR INSERT, UPDATE
AS
BEGIN

IF EXISTS (SELECT t.starttime, t.endtime FROM TargetTable t
Join inserted i
On (i.starttime > t.starttime AND i.starttime < t.endtime AND i.UniqueId <> t.UniqueId)
OR (i.endtime < t.endtime AND i.endtime > t.starttime AND i.UniqueId <> t.UniqueId)
OR (i.starttime < t.starttime AND i.endtime > t.endtime AND i.UniqueId <> t.UniqueId)
)
BEGIN
RAISERROR ('Inserted date was within invalid range', 16, 1)
IF (@@TRANCOUNT>0)
ROLLBACK
END


END

关于sql - SQL Server 2008 中唯一的日期范围字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1898858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com