我正在尝试以一种我认为约束无法实现的方式在表上强制执行完整性...
CREATE TABLE myData
(
id INTEGER IDENTITY(1,1) NOT NULL,
fk_item_id INTEGER NOT NULL,
valid_from DATETIME NOT NULL,
invlaid_from DATETIME NOT NULL
)
我要应用的约束是,对于相同的“fk_item_id”,不应有任何具有重叠日期的条目。
笔记:
invalid_from 是有效期之后的瞬间。
这意味着以下两个时期都很好......
- '2008 Jan 01 00:00' -> '2008 Feb 01 00:00' (整个 1 月)
- '2008 年 2 月 1 日 00:00' -> '2008 年 3 月 1 日 00:00'(整个 2 月)
我可以在触发器中检查该规则。但是,当触发器确实发现非法插入/更新时,防止“非法”插入/更新发生的最佳方法是什么?
(如果insert包含两条有效记录和两条无效记录,我可以只停止两条无效记录吗?)
干杯,
德姆斯。
编辑:
在我上面的情况下,使用函数的约束效果很好。但我从来没有弄清楚为什么 RAISERROR 在触发器版本中不起作用。
我认为这是因为触发器是 AFTER 触发器,我需要一个 BEFORE 触发器,但这似乎不是一个选项......