禁止基于现有值更新列

问题描述 投票:0回答:1

我有下面的示例表

学生 当前_检查点
约翰·史密斯 1
简·史密斯 3

为了防止错误更新或胖手指集体更新,我想强制执行以下规则

对于Current_Checkpoint列,该值只能更新为下一个整数。 例如,对于 John Smith,下一个值只能是 2,对于 Jane Smith,它只能是 4。

将 John Smith 的 Current_Checkpoint 值更新为 3(或 2 以外的任何值)应被数据库拒绝。

我相信这将是一个更新触发器,但我需要帮助构建它。 另外,对列的检查约束是否有意义?

非常感谢。

sql-server triggers sql-update
1个回答
0
投票

是的,您需要一个触发器来强制执行此操作。在主键上连接

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;
© www.soinside.com 2019 - 2024. All rights reserved.