如何在 SQL 中创建 INSTEAD OF 触发器

在本文中,将介绍 INSTEAD OF 触发器的使用,.

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

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

  • AFTER 触发器
  • INSTEAD OF 触发器
  • BEFORE 触发器

SQL 中的 INSTEAD OF 触发器在执行操作查询之前执行或者触发。 我们使用 CREATE TRIGGER 和 INSTEAD OF 子句在 SQL 中创建一个 INSTEAD OF 触发器。

创建billtbl表的语句

create table billtbl
(
billid int not null identity primary key,

vendorid int not null,
billno varchar(15),
billtotal money,
paymenttotal money,

creadittotal money
)

在billtbl表中插入数据

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

创建vendors表

create table vendors

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

在vendors表中插入数据

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

创建触发器

create trigger vip_inv
on onitroadTestDB_billtbl
instead of insert
as
declare

@billno varchar(15),
@billtotal money,
@vendorid int,
@rowcount int

select @rowcount = count(*) from inserted
if @rowcount = 1
	begin
	select @billno = billno,@billtotal = billtotal

	from inserted
	if(@billno is not null and @billtotal is not null)
		  begin
				select @vendorid = vendorid from vendors

				where vendorname = 'onitroadTestDB'
				insert into billtbl (vendorid,billno,billtotal)
				values (@vendorid,@billno,@billtotal)
		  end

	end
else
raiserror('Limit insert to a single row.',1,1)

当插入数据时,将触发触发器

insert into onitroadTestDB_billtbl values('A35',3000);
日期:2020-06-02 22:17:52 来源:oir作者:oir