如何设计SQL触发器确保数据修改时备注原因必须非空且提供详细修改原因?
- 内容介绍
- 相关推荐
本文共计1115个文字,预计阅读时间需要5分钟。
不能直接在SQL查询器中做非空校验并抛出通用错误——必须明确检查+inserted+和+deleted+表中对应字段的值,再用+RAISERROR+或+THROW+中断执行。
为什么 UPDATE/INSERT 必须显式检查原因字段是否为空
SQL Server 触发器不支持像 CHECK 约束那样声明式地限制“某列非空才允许写入”。即使你在表结构里没设 NOT NULL,业务上要求每次修改都填 reason(比如 modify_reason),就得靠触发器拦截非法操作。关键点在于:inserted 表只在 INSERT 和 UPDATE 时有数据,deleted 表只在 DELETE 和 UPDATE 时有数据;而 UPDATE 是唯一同时涉及两者的操作,所以必须分开判断。
本文共计1115个文字,预计阅读时间需要5分钟。
不能直接在SQL查询器中做非空校验并抛出通用错误——必须明确检查+inserted+和+deleted+表中对应字段的值,再用+RAISERROR+或+THROW+中断执行。
为什么 UPDATE/INSERT 必须显式检查原因字段是否为空
SQL Server 触发器不支持像 CHECK 约束那样声明式地限制“某列非空才允许写入”。即使你在表结构里没设 NOT NULL,业务上要求每次修改都填 reason(比如 modify_reason),就得靠触发器拦截非法操作。关键点在于:inserted 表只在 INSERT 和 UPDATE 时有数据,deleted 表只在 DELETE 和 UPDATE 时有数据;而 UPDATE 是唯一同时涉及两者的操作,所以必须分开判断。

