【发布时间】:2017-03-02 18:04:04
【问题描述】:
我试图通过开始日期和结束日期来限制 SQL Server 数据库,这样我就不能重复预订资源(即没有重叠或重复的预订)。
假设我的资源被编号使得表格看起来像 ResourceId、StartDate、EndDate、状态
假设我有资源 #1。我想确保我不能为同一资源预订 2017 年 1 月 8 日至 2017 年 1 月 16 日和 2017 年 1 月 10 日至 2017 年 1 月 18 日的单独预订。
还有一些复杂情况,资源的 StartDate 可以与资源的 EndDate 相同。所以 1/8/1027 到 1/16/2017 和 1/16/2017 到 1/20/2017 是可以的(即一个人可以在同一天签入另一个人结帐)。
此外,“状态”字段指示资源的预订是“活动”还是“已取消”。所以我们可以忽略所有取消的预订。
在保存时,我们在代码(存储过程和 C#)中防止了这些重叠或重复预订,但我们希望通过添加数据库约束来增加额外的保护层。
这在 SQL Server 中可行吗?
提前致谢
【问题讨论】:
-
你可以用触发器做这样的事情,我敢肯定,但我认为你不能在约束中做你需要的事情。
标签: sql-server date range constraints