如何在 SQL 中使用 AFTER 触发器

在本文中,将介绍如何在 SQL 中使用 AFTER 触发器。

SQL 中的触发器是一种特殊类型的过程,可自动执行、触发或者调用以响应在视图或者表上执行的操作查询。 我们可以在插入、删除和更新或者这些操作的组合上设置触发器。

SQL 中有三种类型的触发器。

  • AFTER 触发器
  • INSTEAD OF 触发器
  • FOR 触发器

SQL 中的 After 触发器在执行操作查询后执行或者触发。 它用于实现参照完整性的概念。 我们使用 CREATE TRIGGER 和 AFTER 子句来创建一个后触发器。

创建copybilltbl表的语句

create table copybilltbl
(
billid int not null identity primary key,
vendorid int not null,
billno varchar(15),
billtotal money,
paymenttotal money,

creadittotal money
)

在Copybilltbl表中插入数据

insert into copybilltbl values (20,'e001',100,100,0.00)
insert into copybilltbl values (21,'e002',200,200,0.00)
insert into copybilltbl values (22,'e003',500,0.00,100)
insert into copybilltbl values (23,'e004',1000,100,100)
insert into copybilltbl values (24,'e005',1200,200,500)

创建Copyoirvenders表

create table copyvendors
(

vendorid int,
vendorname varchar(15),
vendorcity varchar(15),
vendorstate varchar(15)

)

在Copyoirvenders表中插入数据

insert into copyvendors values (20,'onitroadTestDB','noida','up')
insert into copyvendors values (21,'jack','lucknow','up')
insert into copyvendors values (22,'rahul','kanpur','up')
insert into copyvendors values (23,'malay','Amsterdam','Amsterdam')
insert into copyvendors values (24,'mayank','noida','up')

创建触发器

create trigger copyvendors_del_up
on copyvendors
after delete,update
as
if exists ( select * from deleted join copybilltbl
on deleted.vendorid=copybilltbl.vendorid )

begin
raiserror('Vendor ID is in Use in other table.',1,1)
rollback tran
end

触发copyvendors_del_up

delete from copyvendors
where vendorid=11

创建触发器

create trigger copybilltbl_ins_up
on
copybilltbl
after insert,update
as

if not exists ( select * from copyvendors where vendorid IN (select vendorid from inserted))
begin raiserror('Vendor is invalied',1,1)
rollback tran
end

触发copybilltbl_ins_up

insert into copybilltbl
values(12,'b32',3818,1500,2300)
日期:2020-06-02 22:17:57 来源:oir作者:oir