触发器的使用简单例子

原创 2012年03月22日 12:07:27
Create Trigger tmp_translator       --触发器的名字
On t_translator_time                --在t_translator_time表中创建触发器
for Insert                          --为什么事件触发(insert,update,delete)
As                                  --事件触发后所要做的事情
DECLARE @REALNAME varchar(100)      --声明一个变量
SELECT @REALNAME=username From inserted  ----取得登记译者的姓名(系统表inserted,deleted)
Delete tmp_t_translator_detail WHERE realname=@REALNAME --执行删除操作

上面是简单的一个insert触发delete操作。下面是update来触发,update操作

-----下面的触发器
ALTER  Trigger time_translator
on t_translator
for Insert   ----当译者表中插入时
as 
--当前日期的星期天是哪天begin
declare @WeekDay datetime
declare @NowWeekDay nvarchar(20)
set @NowWeekDay=(--当前星期几
select datename(dw,getdate()))
set @WeekDay=(
select
case @NowWeekDay 
when '星期日' then getdate()
when '星期一' then dateadd(day,6,getdate())
when '星期二' then dateadd(day,5,getdate())
when '星期三' then dateadd(day,4,getdate())
when '星期四' then dateadd(day,3,getdate())
when '星期五' then dateadd(day,2,getdate())
when '星期六' then dateadd(day,1,getdate())
end
)
--当前日期的星期天是哪天end
Declare @RREALNAME varchar(100) 
SELECT @RREALNAME=[name] from inserted ----取得登记译者的姓名
begin
    declare @id int
    set @id = (select max(id) from t_translator)
    insert into tmp_t_translator_detail SELECT name, @id,     '', CONVERT(varchar(100), @WeekDay, 23),'上午(9:00 - 11:30)','未填','','未填','','未填','','未填','','未填','','未填','','未填','', major,master_major,master_research,doctor_major,doctor_research,postdoctor_major,postdoctor_research,way_to_charge,phone,home_telephone,mail,mail2,source1,target1,source2,target2,source3,target3,subject11,subject12,subject13,subject21,subject22,subject23,subject31,subject32,subject33,band11,band12,band21,band22,band31,band32,source4,source5,source6,target4,target5,target6,category_professional,category_word,passed,translator_id ,remark1,Product FROM inserted where name = @RREALNAME
    insert into tmp_t_translator_detail SELECT name, @id + 1, '', CONVERT(varchar(100), @WeekDay, 23),'下午(13:00 - 17:00)','未填','','未填','','未填','','未填','','未填','','未填','','未填','', major,master_major,master_research,doctor_major,doctor_research,postdoctor_major,postdoctor_research,way_to_charge,phone,home_telephone,mail,mail2,source1,target1,source2,target2,source3,target3,subject11,subject12,subject13,subject21,subject22,subject23,subject31,subject32,subject33,band11,band12,band21,band22,band31,band32,source4,source5,source6,target4,target5,target6,category_professional,category_word,passed,translator_id ,remark1,Product FROM inserted where name = @RREALNAME
    insert into tmp_t_translator_detail SELECT name, @id + 2, '', CONVERT(varchar(100), @WeekDay, 23),'晚间(17:00 - 次日9:30)','未填','','未填','','未填','','未填','','未填','','未填','','未填','', major,master_major,master_research,doctor_major,doctor_research,postdoctor_major,postdoctor_research,way_to_charge,phone,home_telephone,mail,mail2,source1,target1,source2,target2,source3,target3,subject11,subject12,subject13,subject21,subject22,subject23,subject31,subject32,subject33,band11,band12,band21,band22,band31,band32,source4,source5,source6,target4,target5,target6,category_professional,category_word,passed,translator_id ,remark1,Product FROM inserted where name = @RREALNAME
end
-----下面的触发器
ALTER  Trigger time_translator1
on t_translator
for Update   ----当译者表中插入时
as 
--当前日期的星期天是哪天begin
declare @WeekDay datetime
declare @NowWeekDay nvarchar(20)
set @NowWeekDay=(--当前星期几
select datename(dw,getdate()))
set @WeekDay=(
select
case @NowWeekDay 
when '星期日' then getdate()
when '星期一' then dateadd(day,6,getdate())
when '星期二' then dateadd(day,5,getdate())
when '星期三' then dateadd(day,4,getdate())
when '星期四' then dateadd(day,3,getdate())
when '星期五' then dateadd(day,2,getdate())
when '星期六' then dateadd(day,1,getdate())
end
)
--当前日期的星期天是哪天end

begin
Declare @RREALNAME varchar(100) 
SELECT @RREALNAME=[name] from inserted ----取得登记译者的姓名
if((select count(*) from t_translator_time where username=@RREALNAME and week= CONVERT(varchar(100), @WeekDay, 23)))=0  --如果在临时表和时间登记中都没有记录
     update t set t.major=b.major,t.master_major=b.master_major,t.master_research=b.master_research,t.doctor_major=b.doctor_major,t.doctor_research=b.doctor_research,t.postdoctor_major=b.postdoctor_major,
t.postdoctor_research=b.postdoctor_research,t.way_to_charge=b.way_to_charge,t.phone=b.phone,t.home_telephone=b.home_telephone,t.mail=b.mail,t.mail2=b.mail2,t.source1=b.source1,t.target1=b.target1,t.source2=b.source2,t.target2=b.target2,
t.source3=b.source3,t.target3=b.target3,t.subject11=b.subject11,t.subject12=b.subject12,t.subject13=b.subject13,t.subject21=b.subject21,t.subject22=b.subject22,t.subject23=b.subject23,t.subject31=b.subject31,t.subject32=b.subject32,
t.subject33=b.subject33,t.band11=b.band11,t.band12=b.band12,t.band21=b.band21,t.band22=b.band22,t.band31=b.band31,t.band32=b.band32,t.source4=b.source4,t.source5=b.source5,t.source6=b.source6,t.target4=b.target4,t.target5=b.target5,t.target6=b.target6,
t.category_professional=b.category_professional,t.category_word=b.category_word,t.passed=b.passed,t.translator_id=b.translator_id ,t.remark1=b.remark1,t.Product=b.Product
    FROM tmp_t_translator_detail t right join inserted b ON t.realname=@RREALNAME  //更新记录  right join
    else
    begin
     rollback Transaction
    end
 end



简单说说MYSQL的触发器(例子包括了存储过程)

MYSQL的触发器语法: CREATE  TRIGGER     (1)                     { BEFORE | AFTER } (2) { INSERT | UP...
  • sage425
  • sage425
  • 2012年06月05日 10:16
  • 997

Unity3D使用碰撞体做触发器实现简单的自动开门

 在游戏制作中触发器的使用非常的方便也非常实用。这一张我们简单介绍一下如何使用一个简单的触发器来实现自动开门关门的效果。 首先确保你已经对门进行了动画的设置。 具体流程如下。 选择Wind...

[Unity3D]使用碰撞体做触发器实现简单的自动开门

翻译自DT的经典教程:《Introduction to Unity》。 在游戏制作中触发器的使用非常的方便也非常实用。这一张我们简单介绍一下如何使用一个简单的触发器来实现自动开门关门的效果。...

mysql 触发器简单使用

触发器(trigger):监视某种情况,并触发某种操作。 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo...

数据库oracle--触发器的简单使用

PS:本篇纯用于个人自学 /*触发器类似一个监控器,它监控的是一张表,当该表被insert delete update等操作时触发器可以进行控制,输出日志等。*/ /*首先要使用触发器要有一张表 打开...

利用navicat创建存储过程、触发器和使用游标的简单实例

创建存储过程和触发器   1、建表 首先先建两张表(users表和number表),具体设计如下图:   2、存储过程 写一个存储过程,往users表中插入数据,创建过程如下:   代码如下:...
  • cqnuztq
  • cqnuztq
  • 2013年08月03日 21:34
  • 60690

[Unity3D]使用触发器实现简单的场景跳转

学习Unity脚本推荐:Unity3D官网索引 首先一点,你要确保有一个想要跳转的目标场景。在本案例中,目标场景是ending。 第一步:创建一个碰撞体,放置在需要的触发场景跳转的...

利用navicat创建存储过程、触发器和使用游标的简单实例

创建存储过程和触发器   1、建表 首先先建两张表(users表和number表),具体设计如下图:   2、存储过程 写一个存储过程,往users...

PL/SQL中触发器的简单使用

触发器的简单使用 1.触发器介绍 数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自...

sqlserver触发器例子

  • 2011年09月01日 16:04
  • 5KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:触发器的使用简单例子
举报原因:
原因补充:

(最多只允许输入30个字)