在table A
我有 2 列:
ID (int, PK)
MaxUsers (int)
在table B
我有 2 列:
ItemID (int)
UserID (int)
table A
匹配的记录数ItemID
不能超过该MaxUsers
值。
是否可以编写一个 T-SQL 表约束,以使这种情况在物理上不可能发生?
干杯! 生硬
在table A
我有 2 列:
ID (int, PK)
MaxUsers (int)
在table B
我有 2 列:
ItemID (int)
UserID (int)
table A
匹配的记录数ItemID
不能超过该MaxUsers
值。
是否可以编写一个 T-SQL 表约束,以使这种情况在物理上不可能发生?
干杯! 生硬
您可以编写一个插入/更新触发器,在不再满足条件时回滚查询。
您可以使用“vanilla”约束来做到这一点,例如行级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
顺序,您可以创建一个“帮助”存储过程或触发器。