0

employeeswipe_tbl在 SQL Server 2008 中有一个包含这些列的表:

create employeeswipe_tbl swipepk int (
swipepk int primary ,
empid  int,
dateofswipe date ,
intime datetime,
outime datetime,
logduration  time
)

当员工登录时intime, empid, dateofswipe输入和注销时outime更新swipepk

现在我想要的是当我更新时outtimelogduration自动计算

logduration  = outtime - intime

我正在考虑一些想法,例如计算列或触发器。考虑到我是初学者,谁能给出一个好的选择?

4

1 回答 1

2

计算列通常是比触发器更好的选择。可以禁用触发器。计算列“总是”正确:

create table employeeswipe_tbl (
swipepk int primary key,
empid  int,
intime datetime,
outime datetime,
dateofswipe AS CONVERT(date,intime) ,
logduration AS DATEDIFF(second,intime,outime)
)

正如我的评论中所指出的,两个datetimes 之间的差异将是一个时间跨度,而不是另一个 s datetime。SQL Server 中没有时间跨度类型,因此最好以秒为单位保持差异 - 在显示期间将其格式化为小时、分钟和秒。例如,如果您需要将几行数据相加,这将变得更容易。


旁注 - 我也在考虑制作dateofswipe一个计算列 - 它不只是日期的一部分intime吗?

于 2012-12-12T13:20:02.410 回答