假设我有一张包含以下布局的表格:
Id Int PRIMARY KEY IDENTITY
DateFrom datetime NOT NULL
DateTo datetime NOT NULL
UserId Int
UserId是用户表的外键,显然有更多数据与此问题无关。
我想要做的是确保每个用户不会有任何重叠的“句号”,也就是说,从2009年5月15日到18日,我们有一行用户1的数据2009年5月,那么数据库中不能包含任何其他行(2009年5月15日至18日,包括这两个日期)。
我如何以最好的方式解决这个问题?我最初的想法是使用触发器,但我不确定如何和/或是否有更好的方法来进行更多这样的“自定义”数据验证?
答案 0 :(得分:2)
我的朋友我相信你是现实。触发器是出于这个原因而设计的,用于实现业务规则。
联机丛书文档中有一些示例可帮助您入门。
答案 1 :(得分:1)
您需要使用INSERT / UPDATE触发器。确保在编写触发器时它处理一次插入或更新多行的情况。
答案 2 :(得分:1)
一个常见问题。您可以使用约束:
答案 3 :(得分:0)
一种方法,特别是如果您的粒度是在日级别(顺便说一下,如果是这种情况,而您是SQL Server 2008,那么您应该使用日期类型而不是datetime),是有另一个表,如: UserId int, 日期时间, 主键(UserId,Day) 然后插入,删除,更新用户在原始表中的任何插入,删除,更新的所有日子,并让服务器对PK的唯一性约束为您进行验证。