You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server如何创建INSERT触发器校验dbo.student表StudentID合规性

针对SQL Server环境的StudentID校验触发器实现

因为表使用了dbo默认架构,以下方案适配SQL Server数据库,直接满足你的校验需求。

触发器完整代码

CREATE TRIGGER trg_student_check_studentid
ON dbo.student
INSTEAD OF INSERT
AS
BEGIN
    SET NOCOUNT ON;

    -- 批量校验所有待插入的StudentID格式
    IF EXISTS (
        SELECT 1 FROM inserted
        WHERE
            LEN(StudentID) != 5 -- 固定长度为5位:2位前缀+3位数字
            OR LEFT(StudentID, 2) != 'SV' -- 前缀必须为大写SV
            OR TRY_CAST(RIGHT(StudentID, 3) AS INT) NOT BETWEEN 0 AND 100 -- 后三位数字在000-100范围内,非数字自动校验失败
    )
    BEGIN
        RAISERROR('StudentID格式非法,要求为SV后跟000-100的三位数字,合法示例:SV000、SV099、SV100', 16, 1);
        ROLLBACK TRANSACTION;
        RETURN;
    END

    -- 校验通过后执行实际插入,替换下方字段为你表的实际字段即可
    INSERT INTO dbo.student (StudentID, Name, Age, 其他字段)
    SELECT StudentID, Name, Age, 其他字段 FROM inserted;
END

规则说明

  • 兼容批量插入场景:一次性插入多条数据时只要有一条不符合规则,全部拦截
  • 无需额外判断非数字:TRY_CAST在转换失败时会返回NULL,自动命中不符合条件的逻辑,适配SQL Server 2012及以上版本
  • 如果需要支持小写sv前缀,可将前缀判断改为UPPER(LEFT(StudentID, 2)) != 'SV'

更高性能的替代方案(无需触发器)

如果没有其他触发器联动逻辑,直接加CHECK约束性能更好,实现更简单:

ALTER TABLE dbo.student
ADD CONSTRAINT chk_student_studentid_format
CHECK (
    LEN(StudentID) = 5
    AND LEFT(StudentID, 2) = 'SV'
    AND TRY_CAST(RIGHT(StudentID, 3) AS INT) BETWEEN 0 AND 100
);

内容的提问来源于stack exchange,提问作者hoangtd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:36:01