sql - SQL 更新后触发器混淆
问题描述
我希望有一个人可以帮助我。这是我的第一篇文章,所以我希望我能解释清楚。
我正在使用 Microsoft SQL 管理工作室。
我正在尝试制作一个触发器,如果该人没有在我制作的数据库中返回计算机,则不允许任何人更改该人的个人号码。
因此,我正在为具有 ID_Person 主键、Name、Surname 和 Personal_numb 的表 Person 制作触发器。另外,我创建了一个名为 Renting 的表,其中包含以下列:ID_Renting 主键、ID_Person 外键、ID_Computer 外键以及 Date_Rented 和 Date_Returned 列。这是我的代码的样子:
create trigger NO
On Person
after update
as
begin
if update(Personal_numb)
(select ID_Person from Renting
where Renting.Date_Returned is null)
begin
Raiserror('Person needs to return the computer before you try to change their personal number!', 16,1)
end
end
但是,我知道我在 if update(Personal_numb) 和 select 之间遗漏了一些东西,但它是什么?
解决方案
你可以试试这样的
drop trigger if exists trg_Person_upd;
go
create trigger trg_Person_upd on Person
after update
as
set nocount on;
if exists(select * from inserted);
begin
if exists (select *
from Renting r
join inserted i on r.ID_Person=i.ID_Person
join deleted d on r.ID_Person=d.ID_Person
where i.Personal_numb<>d.Personal_numb
and r.Date_Returned is null))
throw 50000, 'Person needs to return the computer before you try to change their personal number!', 1;
end
推荐阅读
- python - 使用 ModelForm 将模型的实例与不同模型的实例链接起来
- java - 我将如何使用 org.json API 读取这个 json 字符串
- angular - 如何从angular6中的blob在iframe中显示pdf?
- wpf - 数据最终不是一步一步来查看的;如何使用 Dispatcher 在 UI 线程和渲染线程之间切换?
- botframework - 在本地测试中使用 bot 向已知用户发送通知时出现“Access-Control-Allow-Origin”错误
- ios - 如何添加List中间的UITableViewRow
- android - 什么是 kotlin 中的内联类?
- javascript - 过滤多个组合框 SAPUI5
- android - 如何根据 JSON 响应设置多个按钮?
- python - Python 日志记录模块:如果(且仅当)断言测试失败时如何将日志保存到文件中?