SQL SERVER:求做一个触发器

来源:百度知道 编辑:UC知道 时间:2024/05/10 06:21:10
sql server 2000的表中添加一个触发器,实现如下功能:
表中有三列,前两列是datetime类型,分别叫做qssj、jssj,表示起始时间,结束时间,格式如 “2006-12-07 12:30”,“2006-12-08 14:00”,第三列叫cxsj表示持续时间,以小时为单位,怎样做触发器,才能让第三列等于前两列的时间差?例如前面的数应当是25.5。第三列应设成datetime类型还是别的类型?
前两列是人工填写,要求第3列是系统自动生成。触发器怎么做呢?直接写cxsj=jssj-qssj吗?

最简单的方法是使用计算列
create table t1
(
qssj datetime,
jssj datetime,
cxsj as cast(datediff(minute,qssj,jssj)/60. as numeric(18,2)),
)

不过试了一下,似乎是SQL SERVER2000计算方式有问题,只能得到完整的小时数,比如你说的那两个时间的计算列值为25,SQL SERVER2005中可以得到想要的值。

用触发器当然也可以,并且能得到想要的值,不过,触发器本身比较耗资源,一般情况下不推荐用,如果数据量不大就无大碍了。

--创建表
create table t1
(
qssj datetime,
jssj datetime,
cxsj numeric(18,2)
)

go
--创建触发器
create trigger tg_t1
on t1
instead of insert
as
insert into t1
select qssj,jssj,cast(datediff(minute,qssj,jssj)/60. as numeric(18,2)) as cxsj
from inserted

go
--测试结果
insert into t1(qssj,jssj)
select '2006-12-07 12:30','2006-12-08 14:00'

select * from t1

我个人认为第三列可以设置为长整形的,以分钟为时间差,我只是帮你提个建议,触发器忘了怎么做了

数字