确保MS SQL Server,DB Level中的正确数据

时间:2009-05-20 15:32:21

标签: sql-server tsql validation triggers

假设我有一张包含以下布局的表格:

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日,包括这两个日期)。

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

4 个答案:

答案 0 :(得分:2)

我的朋友我相信你是现实。触发器是出于这个原因而设计的,用于实现业务规则。

联机丛书文档中有一些示例可帮助您入门。

http://msdn.microsoft.com/en-us/library/ms189799.aspx

答案 1 :(得分:1)

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

答案 2 :(得分:1)

答案 3 :(得分:0)

一种方法,特别是如果您的粒度是在日级别(顺便说一下,如果是这种情况,而您是SQL Server 2008,那么您应该使用日期类型而不是datetime),是有另一个表,如: UserId int, 日期时间, 主键(UserId,Day) 然后插入,删除,更新用户在原始表中的任何插入,删除,更新的所有日子,并让服务器对PK的唯一性约束为您进行验证。