博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习触发器
阅读量:5046 次
发布时间:2019-06-12

本文共 3029 字,大约阅读时间需要 10 分钟。

1,对于表的更新,插入,删除可以定义触发器。通常对于更新/插入/删除,对于某一情况,只能定义一个触发器,也就是说,对于更新可以有一个触发器,插入一个触发器,删除一个触发器,总共最多三个。

2,实际上在修改记录时,以前的内容保存在deleted表中,新的内容保存在inserted表中。

3,更新时,定义如下

 create     trigger tri_bugs_updatestatus on bugs instead of update

as

4,之后就是触发器内容了,如果有变量,先定义:

DECLARE @mybugid int,@myuserid int

5,对于使用if else分支,每个分支需要begin end来表示范围。例如:

if exists(select 1 from inserted where bg_status=7 and [Finished Date] is not null  //inserted表示将更新的值,取出判断

 and 。。。。 )
 begin
 update bugs set   //更新实际表
 bg_short_desc=inserted.bg_short_desc,
。。。。。。
 [Finished Date]=inserted.[Finished Date]
 from inserted
 where bugs.bg_id = inserted.bg_id 
 select @mybugid=myinserted.bg_id,@myuserid=myinserted.bg_last_updated_user from inserted as myinserted //将数据放到变量里
 delete from bugmsg where bugid <> 1 and userid = @myuserid 
 insert into bugmsg(bugid,bugmessage,userid) values(@mybugid,'Issue updated',@myuserid) //将变量插入到另外一个表

end 

6,回滚:ROLLBACK TRANSACTION

 

这个例子:

 

Create                         trigger tri_bugs_updatestatus on bugs instead of update 

as
    DECLARE @mybugid int,@myuserid int
    if  exists(select 1 from deleted where bg_status=7)
 begin
 ROLLBACK TRANSACTION
     select @mybugid=myinserted.bg_id,@myuserid=myinserted.bg_last_updated_user from inserted as myinserted
     delete from bugmsg where bugid <> 1 and userid = @myuserid 
        insert into bugmsg(bugid,bugmessage,userid) values(@mybugid,'Issue not updated because issue locked when its Status is Closed',@myuserid)
 end
    else if exists(select 1 from inserted where bg_status=7 and [Finished Date] is not null
 and ((bg_category in (6,7) and [Application Name] ='Axapta' and Modules != 'None') or
 (bg_category in (6,7) and [Application Name] ='SharePoint' and Modules = 'None') or
 (bg_category in (6,7) and [Application Name] ='MicroSoft Office' and Modules = 'None') or
 (bg_category not in (6,7) and [Application Name] ='None' and Modules = 'None')))
 begin
 update bugs set
 bg_short_desc=inserted.bg_short_desc,
 bg_reported_user=inserted.bg_reported_user,
 bg_reported_date=inserted.bg_reported_date,
 bg_status=inserted.bg_status,
 bg_priority=inserted.bg_priority,
 bg_org=inserted.bg_org,
 bg_category=inserted.bg_category,
 bg_project=inserted.bg_project,
 bg_assigned_to_user=inserted.bg_assigned_to_user,
 bg_last_updated_user=inserted.bg_last_updated_user,
 bg_last_updated_date=inserted.bg_last_updated_date,
 bg_user_defined_attribute=inserted.bg_user_defined_attribute,
 [Application Name]=inserted.[Application Name],
 Weighting=inserted.Weighting,
 Modules=inserted.Modules, 
 [Preferred Engineer]=inserted.[Preferred Engineer],
 Owner=inserted.Owner,
 Detail=inserted.Detail,
 Solution=inserted.Solution,
 [Finished Date]=inserted.[Finished Date]
 from inserted
 where bugs.bg_id = inserted.bg_id
     select @mybugid=myinserted.bg_id,@myuserid=myinserted.bg_last_updated_user from inserted as myinserted
     delete from bugmsg where bugid <> 1 and userid = @myuserid 
 insert into bugmsg(bugid,bugmessage,userid) values(@mybugid,'Issue updated',@myuserid)

 end 

 

posted on
2008-11-06 16:50 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/JackyXu1981/archive/2008/11/06/1328252.html

你可能感兴趣的文章
Carthage的安装和使用
查看>>
iOS bug解决方案(01)
查看>>
TopCoder SRM 642 Div.2 1000 --二分+BFS
查看>>
UVALive 4426 Blast the Enemy! --求多边形重心
查看>>
http://www.cs.cmu.edu/~ggordon/IRLS-example/
查看>>
用上了360免费云盘
查看>>
jenkins document
查看>>
SQL2005安装图解
查看>>
C++的优秀特性4:指针
查看>>
grid调整宽度自动保存,下次启动保持原来的宽带
查看>>
如何写出高性能SQL语句
查看>>
webpack+react搭建环境
查看>>
图片提示效果
查看>>
一个意外的发现
查看>>
配置Mysql Group Replication遇到的问题笔记
查看>>
BZOJ1232: [Usaco2008Nov]安慰奶牛cheer(最小生成树)
查看>>
Visual Studio 2012 如何打开MVC1.0 MVC2.0的项目
查看>>
Linux-dd命令详解
查看>>
Zookeeper协调服务系统·ELK日志管理系统简介
查看>>
大数据小项目之电视收视率企业项目08--》MapReduce编写之Wordcount
查看>>