首页 > 解决方案 > 使用触发器检查 SQL Server 中的输入时如何忽略一些无效行?

问题描述

我有一张这样的桌子:

create table Users (
    ID char(10) not null primary key,
    Name nvarchar(30),
    Gender nvarchar(10),
);

性别仅包含 2 个值中的 1 个,即男性或女性。
假设我将同时向用户表中插入多行。我编写了一个触发函数来检查性别变量是否使用游标变量有效,否则该函数将忽略当前行并检查剩余行。但是我的老师说我的方法不好,因为它需要太多时间,有没有更好的方法来解决这个问题???非常感谢!!!

标签: sqlsql-server

解决方案


我相信你需要检查约束:

alter table Users 
add constraint ck_gender
check (Gender in ('MALE', 'FEMALE'));

这是一个小DEMO

也许这样的事情会适合你:

CREATE Trigger tr_gender_check on Users AFTER INSERT
AS
IF EXISTS (SELECT Gender
           from inserted AS i 
           WHERE i.Gender not in ('MALE', 'FEMALE')
          )
    BEGIN
       RAISERROR ('A Gender entered is not "MALE" or FEMALE so the insert was not made', 16, 1);
       ROLLBACK TRANSACTION;
       RETURN 
end;

这是演示


推荐阅读