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也会自动更新
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的触发器用法
- SQL Server:SQL Like 通配符特殊用法:Escape
- SQL Server 触发器
- SQL Server 中关于EXCEPT和INTERSECT的用法
- SQL Server部分函数的基本用法
- SQL Server 触发器
- SQL SERVER的行式触发器
- SQL Server 限制IP登陆(登陆触发器运用)
- SQL Server 中 RAISERROR 的用法
- sql server 触发器简单学习
- Sql Server 中事务(begin tran/commit tran/rollback tran)的用法
- 触发器和游标的用法
- Mark:SQL Server关于CAST和CONVERT的区别和用法
- sql server 2005中的分区函数用法(partition by 字段)
- SQL Server 排序函数 ROW_NUMBER和RANK 用法总结
- sql server 系统函数用法实例
- SQL Server:触发器详解
- SQL Server的patindex和charindex的用法