sql - 使用触发器检查 SQL Server 中的输入时如何忽略一些无效行?
问题描述
我有一张这样的桌子:
create table Users (
ID char(10) not null primary key,
Name nvarchar(30),
Gender nvarchar(10),
);
性别仅包含 2 个值中的 1 个,即男性或女性。
假设我将同时向用户表中插入多行。我编写了一个触发函数来检查性别变量是否使用游标变量有效,否则该函数将忽略当前行并检查剩余行。但是我的老师说我的方法不好,因为它需要太多时间,有没有更好的方法来解决这个问题???非常感谢!!!
解决方案
我相信你需要检查约束:
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;
这是演示。
推荐阅读
- scala - Embedded Kafka & Spark 2.3 版本不匹配问题
- azure - 如何更改默认答案 Azure qnamaker 中未找到 QnAMaker 答案
- google-cloud-platform - 如何在 BigQuery 控制台中加载 Google ClusterData 2019 跟踪?
- java - 是否可以比较毫秒级?比如 00:05 秒 > 00:002 秒
- amazon-s3 - 网页存档到 mht/mntml
- python - 如何在 azure python 应用服务中将目录添加到 PATH
- php - 如果不能与 echo 作为选项之一结合使用 PHP 速记?
- c# - 使用 AuthenticationTypes.Sealing 时如何使用安全标志
- python - 如何将 python 字典转换为可以接受为 **kwargs 的形式?
- excel - 编译错误:未定义子或函数 - 我想在我的表单中添加一个 Enter 按钮