创建T-SQL约束来防止表中的x重复记录数量?
问题描述:
在table A
我有2列:创建T-SQL约束来防止表中的x重复记录数量?
ID (int, PK)
MaxUsers (int)
在table B
我有2列:
ItemID (int)
UserID (int)
的记录数table A
匹配ItemID
的不能超过MaxUsers
值。
是否可以编写一个T-SQL表约束,使它在物理上不可能发生这种情况?
干杯! Curt
答
您可以编写一个on-insert/update触发器,用于在条件不再满足时执行回滚查询。
+0
这听起来很不错。您将需要表B上的INSERT触发器和表A上的UPDATE触发器 – 2010-09-21 11:35:54
答
你可以用'香草'约束来做到这一点,例如行级CHECK
约束条件,UNIQUE
约束条件,FOREIGN KEYS
,使得它非常便携,例如,
CREATE TABLE TableA
(
ID INTEGER NOT NULL PRIMARY KEY,
MaxUsers INTEGER NOT NULL CHECK (MaxUsers > 0),
UNIQUE (ID, MaxUsers)
);
CREATE TABLE TableB
(
ID INTEGER NOT NULL,
MaxUsers INTEGER NOT NULL,
FOREIGN KEY (ID, MaxUsers)
REFERENCES TableA (ID, MaxUsers),
ID_occurrence INTEGER NOT NULL,
CHECK (ID_occurrence BETWEEN 1 AND MaxUsers),
UNIQUE (ID, ID_occurrence)
);
为了保持ID_occurrence
序列,你可以创建一个“帮手”存储过程或触发器。
你在这里试图解决什么?一家超过其拥有许可证的用户数量的公司? – 2010-09-21 11:31:42
如果有人将MaxUsers数字更新为下限,您会做什么?你将删除表B中的哪些记录? – 2010-09-21 11:35:24
@Lasse - 这是类似的东西是的,谢谢。 – Curt 2010-09-21 11:51:24