SQL Server触发器修改需求:为HiringEMP表实现conversation_date单次赋值
修改后的触发器示例
核心修复要点
- 替换原字符串截取的判断逻辑,改用提取状态数字的方式更可靠
- 添加
conversation_date IS NULL条件,确保仅首次符合要求时赋值 - 兼容多行插入/更新场景,避免单行判断的局限性
完整触发器代码
CREATE TRIGGER trg_convodate ON [dbo].[HiringEMP] FOR INSERT, UPDATE AS BEGIN SET NOCOUNT ON -- 更新符合条件且未设置过conversation_date的记录 UPDATE he SET conversation_date = CURRENT_TIMESTAMP FROM [dbo].[HiringEMP] he JOIN inserted i ON he.id = i.id -- 提取HiringStage的数字部分并判断是否≥3 WHERE TRY_CAST(LEFT(i.HiringStage, CHARINDEX('-', i.HiringStage) - 1) AS INT) >= 3 -- 确保仅首次赋值 AND he.conversation_date IS NULL END
关键逻辑说明
- 状态判断优化:通过
CHARINDEX找到-的位置,截取前面的数字部分并转成整数,直接判断是否≥3,比字符串匹配更精准,避免状态文本变化导致的判断失效 - 首次赋值控制:
he.conversation_date IS NULL确保只有从未设置过日期的记录才会被更新,即使后续状态升级(比如从3到5)也不会覆盖已有的日期 - 多行兼容:使用
JOIN inserted替代原有的WHERE id IN (...),同时处理多条记录插入/更新的场景,避免原触发器单行查询的限制
内容的提问来源于stack exchange,提问作者Jerrico
相关产品推荐
相关产品推荐

