我有下面的示例表
学生 | 当前_检查点 |
---|---|
约翰·史密斯 | 1 |
简·史密斯 | 3 |
为了防止错误更新或胖手指集体更新,我想强制执行以下规则
对于Current_Checkpoint列,该值只能更新为下一个整数。 例如,对于 John Smith,下一个值只能是 2,对于 Jane Smith,它只能是 4。
将 John Smith 的 Current_Checkpoint 值更新为 3(或 2 以外的任何值)应被数据库拒绝。
我相信这将是一个更新触发器,但我需要帮助构建它。 另外,对列的检查约束是否有意义?
非常感谢。
是的,您需要一个触发器来强制执行此操作。在主键上连接
inserted
和 deleted
,如果发现不正确的行,则会抛出错误。
CREATE OR ALTER TRIGGER CheckpointExactlyOne ON dbo.YourTable
AS
SET NOCOUNT ON;
IF EXISTS (SELECT 1
FROM inserted i
JOIN deleted d ON d.YourPrimaryKey = i.YourPrimaryKey
WHERE i.Current_Checkpoint <> d.Current_Checkpoint + 1
)
THROW 50001, N'Must update Current_Checkpoint to exactly 1 more than existing value', 1;