2009-05-20 83 views
2

说我有一个布局如下表:确保在MS SQL服务器,数据库级正确的数据

Id Int PRIMARY KEY IDENTITY 
DateFrom datetime NOT NULL 
DateTo datetime NOT NULL 
UserId Int 

用户ID是外键的用户表,以及显然有更多的数据是不相关的这个问题。

我想要做的是确保每个用户不能有任何重叠的“时期”,也就是说,我们有一行用户1的数据,从2009年5月15日到2009年5月18日,那么数据库中不能包含任何其他行(2009年5月15日至18日,包括这两个日期)中的任何行。

我如何以最好的方式解决这个问题?我最初的想法是使用触发器,但我不确定如何和/或是否有更好的方式来做更像这样的“自定义”数据验证?

回答

1

您需要使用INSERT/UPDATE触发器。确保在编写触发器时处理一次插入或更新多行的情况。

+0

我正在处理这个问题,编写INSERT触发器,同时开始考虑如何处理UPDATE的想法(因为它需要运行所有它对最终结果的检查),但我正在运行进入更新触发器的死胡同,任何提示? – kastermester 2009-05-20 16:40:48

0

一种方式做到这一点,特别是如果你的粒度是在一天的水平(顺便说一句,如果是这样的话,你是SQL Server 2008中,那么你应该使用日期类型而不是日期时间),需要使用另一个表: UserId int, Day datetime, 主键(UserId,Day) 然后插入,删除,更新任何用户的所有日期插入,删除,更新你的原始表,只是让服务器的PK唯一性约束为你做验证。

相关问题