您的位置:首页 > 数据库

SQL Server 中 触发器用法

2013-08-14 15:23 423 查看
1   --新增一个表(表中有一个列(请假总时间)的数据是根据其他列(结束日期-开始日期)的数据自动生成的)

   create table 请假表单1

( 申请人 varchar(10), 开始日期 datetime, 结束日期 datetime, 事由 varchar(max), 请假总时间 as       cast( cast(datediff(hh,开始日期,结束日期)

as decimal(18,1))/24 as decimal(18,1))

 )

这样建表后 新增一条数据时,输入 开始时间和结束时间 请假总时间就自当生成了。

例如:

 insert into 请假表单1(申请人,开始日期,结束日期,事由)

values

('张晓伟4','2013-08-12','2013-08-15 15:00:00.000','嗯') 

 

请假总时间为 3.6

 

使用触发器 也能达到这样的效果 具体步骤为

1  --新增一个列

alter table 请假表单1

add 请假总时间1

nvarchar(50) 

 

2 新建两个触发器

(1)--触发器(update 语句)

CREATE trigger [dbo].[Update_DATA]

 on [dbo].[请假表单1]

 for Update

as

(SELECT 开始日期,结束日期,申请人,cast( cast(datediff(hh,开始日期,结束日期)

as decimal(18,1))/24 as decimal(18,1)) AS 请假总时间1 into #temp FROM inserted)

update a1 set

开始日期 = t.开始日期 ,

结束日期 = t.结束日期, 

请假总时间1=t.请假总时间1

from 请假表单1 a1

INNER JOIN  #temp t on t.申请人 = a1.申请人

where a1.申请人 in (select 申请人 from #temp)

drop table #temp

GO

 

 

(2)--触发器(Insert

 语句)

 

CREATE trigger [dbo].[Insert_DATE]  --新增触发器

 on [dbo].[请假表单1]

 for Insert

as

(SELECT 开始日期,结束日期,申请人,cast( cast(datediff(hh,开始日期,结束日期)

as decimal(18,1))/24 as decimal(18,1)) AS 请假总时间1 into #temp FROM inserted)

update a1 set

开始日期 = t.开始日期 ,

结束日期 = t.结束日期, 

请假总时间1=t.请假总时间1

from 请假表单1 a1

INNER JOIN  #temp t on t.申请人 = a1.申请人

where a1.申请人 in (select 申请人 from #temp)

drop table #temp

return

GO

触发器创建成功 。 此时 如果新增一个请假开始日期 和结束日期的数据 请假总时间1也会自动更新

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SQL Server