我有一个表,用作事件日志并存储用户登录状态'In','Out'或'Rejected'(有时候我的用户是'根据外部标准被拒绝)。SQL Server检查Contraint并检查登录/注销状态
下面是一些示例数据,因此你可以得到的表是什么样子的想法:
Table MyTable
PersonID - State - DateTime
// data sample
156 - 'Out' - 02-14-2010 13:04:15
156 - 'In' - 02-21-2010 09:01:13
16 - 'In' - 02-21-2010 09:05:01
58 - 'Rejected' - 02-21-2010 11:04:58
156 - 'Out' - 02-21-2010 11:10:02
下面是一些pseduo检查约束代码概述我想做什么:
CHECK(
CASE
WHEN (
[State] = 'In' AND
(Select TOP 1 State FROM MyTable WHERE [email protected]_ToUpdate)!='In' ORDER BY DateTime DESC)
)
THEN 'T'
WHEN (
[State] = 'Out' AND
(Select TOP 1 State FROM MyTable WHERE [email protected]_ToUpdate)!='Out' ORDER BY DateTime DESC)
)
THEN 'T'
WHEN (
[State] = 'Rejected' AND
(Select TOP 1 State FROM MyTable WHERE [email protected]_ToUpdate)!='In' ORDER BY DateTime DESC)
)
THEN 'T'
ELSE 'F'
END = 'T'
)
基本上是:
- 一个人可以,如果他们最后的状态签名IN在不“在”
- 一个人可以注册OUT,如果他们最后的状态是不“出”
- 一个人可以是拒绝的,如果他们最后的状态是不“在”
我不知道检查约束是否是最好的方法来做到这一点,或者如果我的数据库设计将允许这个级别的约束;请让我知道,如果我走了我的心(和好心建议用于存储数据和/或确保数据的完整性更合适的方法)
注:我使用的是SQL-Server 2008的
+1,不要使用udf check约束! – 2010-02-22 18:24:42