在本文中,将介绍 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
