问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

触发器的写法

发布网友 发布时间:2022-04-22 01:14

我来回答

2个回答

热心网友 时间:2022-04-14 11:37

使用触发器TRIGGER
INSERT TRIGGER
触发器是由SQL语句集组成的代码块,在响应某些动作时激活该语句集.一个触发器也可被解释为特定类型的存储过程,每当动作发生时执行该存储过程:每当基础表中数据受到数据操纵语言(DML)语句-INSERT,UPDATE,DELETE的影响时,触发器就被激发.
触发器的特征:
1. 当任何数据修改语句发出时,它被sql server自动调用
2. 在存储过程的情况下,它不能被显式地调用或执行
3. 它防止了对数据的不正确,未授权的,和不一致的改变
4. 它不能返回数据给用户
触发器语法:
CREATE TRIGGER trigger_name
ON table_name
[WITH ENCRYPTION]
FOR[INSERT | UPDATE | DELETE]
AS sql_statement
幻表:
当触发器激发对INSERT,DELETE,或UPDATE语句的响应时,两个特殊的表被创建:插入表(Inserted)和删除表(deleted),
示例:
create trigger trgInsertRequisiton
on Requistion
for insert
as
declare @VacnacyReported int
declare @ActualVacancy int
select @ActualVacancy = iBudgetedStrength - currentStrength
from Position join Inserted on
Position.cPositionCode = Inserted.cPositionCode
select @VancyReported = inserted.siNoOfVacancy
from inserted
if(@VancyReported > @ActualVacancy)
begin
print'The actual vacancies are less than the vacncies'
rollback transaction
end
return
DELETE TRIGGER
1.当试图从触发器表中删除一行时,DELETE TRIGGER被触发
2.使用DELETE TRIGGER触发器来实现引用完整性约束主要有三种途径:
1.串联方法:每当从主表中删除记录时,删除依赖表中的记录
2.*方法:如果相尖记录出现在依赖表中,则*从主表中删除记录
3.无效方法:每当一个记录从主表中删除时,把依赖表中所指列的值变为无效
select * from publisher;
create trigger trgfordel
on publisher
for delete
as
begin
print '您删除的数据的内容为'
select * from deleted
end
delete from publisher where pub_id = 9;
UPDATE TRIGGER
当一个UPADATE触发器被激发时,它使用关于其操作的两个逻辑表-包含原始行的deleted表和存储新行的insertd表.
例一:
create trigger trgUpdatePub
on Publisher
for update
as
if update(pub_id)
begin
print 'publisher id cannot be modified'
rollback tran
end
è当用户试图修改pub_id列时它就激发,它因此阻止用户修改pub_id的内容并回滚整个事务
例二:
create trigger trgUpdateContractRecruiter
on ContractRecruiter
for update
as
declare @AvgPercentageCharge int
select @AvgPercentageCharge = avg(siPercentageCharge)
from ContractRecruiter
if(@AvgPercentageCharge > 11)
begin
print 'The average cannot be more than 11'
rollback transaction
end
修改触发器语法:
alter trigger trigger_name
on table_name
[with encryption]
for[insert | delete | update]
as sql_statements
撤消触发器:
DROP TRIGGER trigger_name[,...n]
通过触发器加强数据的完整性
触发器可以用来确保和加强业务规则和数据完整性,如,只有库存中有该产品时,才可以出售,如果使用触发器,它将会对不正确的事务做检查,并确保只有有效的数据才能插入到表中.
例如:某种改变违反了引用完整性,那么所有这样的改变都被拒绝,因此所有试图改变数据库中的数据都被取消.
CREATE TRIGER trgUpdateDelete
ON TitleAuthor
FOR INSERT,UPDATE
AS
If (SELECT COUNT(*) FROM Titles t JOIN inserted i
ON t.Title_id = i.Title_Id) = 0
BEGIN
PRINT 'Invialid title ID entered'
ROLLBACK
END
IF(SELECT (COUNT(*) FROM Authors t JOIN inserted i
ON t.Au_Id = i.Au_Id) = 0
BEGIN
PRINT 'INVIALID author ID eneter'
ROLLBACK
END
多触发器:
SQL SERVER允许在给定表中定义多个触发器.这意味着单个DML语句可激活两个或多个触发器.触发器以创建次序被激活.

AFTER 和 INSTEAD OF 触发器
AFTER触发器在功能上,是在DML操作执行成功后.再执行的触发器.
如:
create triger trgDeletetitles
on Titles
AFTER DELETE
AS
PRINT 'DELETION SUCCESSFUL'
*********************************************************************
假如单个DML后有多个AFTER触发器,你可以通过使用sp_settriggerorder系统存储过程来改变这些触发器的执行次序.
sp_settriggerorder<triggername>,<order-value>,<DML-operation>

ordervalue = FIRST | LAST | NONEè随机顺序
DML-operation 指出创建触发器的DML操作.
sp_settriggerorder 'trgDeleteTitles' , 'FIRST', 'DELETE'
*********************************************************************
INSTEAD OF 触发器 替换的触发器
如:
create trigger trgPublisherDelete
on publishers
instead of delete
as
print 'Master records cannot be deleted!'
这种触发器在一张表上只能创建一个

不正确之处。。欢迎大家指正

参考资料:http://student.csdn.net/space.php?uid=40510&do=thread&id=2302

热心网友 时间:2022-04-14 12:55

create table A(ID int)

creaste table B(ID int,ID2 int default(0))

create trigger tr_A on A
after insert
as
insert B(ID) select ID from inserted

go
实例2
create table A(ID int)

creaste table B(ID int,ID2 int)

create trigger tr_A on A
after insert
as
insert B(ID,ID2) select ID,ID2=0--在触发器里定义
from inserted
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 在电路中电阻的两端并联一个电容,或者电容一端接... 汽油97号[北京95号]什么意思?是不是在北京就用95... 380V滴灯与镇流器和触发器怎么接线 为什么有一些地方的92汽油价格比一般的地约低很多? SN58触发器怎么接两线镇流器 油费以前是多少 如何系统的看懂电路图:单元电路划分法 北京的中石化油价比天津贵吗 74LS175的工作原理和电路图,使用时该怎么接 汽油一升优惠几角是96折 insert触发器是登录触发器吗 桌面应用打不开,显示无法定位程序输入点 汽油价格太贵全国人民都不加汽油了会是什么后果? JK触发器与RS触发器的构成与区别? 今天北京92号汽油多少钱一升? 施密特触发器74HC14并联运用为什么能获得较大的驱... 北京现代途胜1.5t开了三年油耗多少钱一公里? 电平触发器、脉冲触发器、边缘触发器有什么不一样? 手提电脑桌面有个“关闭&quot;黑方图标? 触发器两个端子的接线方法怎样接? 盘点售价百万元,但是只加92#汽油的豪车 重磅!3月17日开始 92号汽油或将彻底进入5元时代! 可爱句子 唯美 怎样恢复删除的聊天记录? 好听的句子唯美短句可爱 开车四千公里要多少钱油 删除的聊天记录怎样恢复 形容女生可爱的句子 95号汽油和92号汽油有什么区别? 形容小女孩可爱的唯美句子 92号汽油和95号汽油有什么差别?哪种燃油品质更高? 李叔叔统计了2012年各月北京地区92号、95号汽油调... 关于小女孩活泼可爱的唯美句子 92号汽油什么时候调价 形容女生可爱的唯美句子 自驾车一公里需要多少油钱? 求一些唯美的句子哦~可爱的,伤感的,都可以 可爱的小金蛙优美语句? 赞美孙子可爱的语句 “闺蜜”短语12字唯美可爱的句子有哪些?