我在SQL Server 2008中有一个表employeeswipe_tbl
,其中包含以下列:
create employeeswipe_tbl swipepk int (
swipepk int primary ,
empid int,
dateofswipe date ,
intime datetime,
outime datetime,
logduration time
)
当输入员工登录intime, empid, dateofswipe
时,退出时outime
更新为swipepk
现在我想要的是当我更新outtime
时logduration
会自动计算,如
logduration = outtime - intime
我在想一些像计算列或触发器这样的想法。考虑到我是初学者,谁能给出一个很好的选择?
答案 0 :(得分: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)
)
如我的评论中所示,两个datetime
之间的差异是时间跨度,而不是另一个datetime
。 SQL Server中没有时间跨度类型,因此只需保持秒的差异可能是最好的 - 在显示期间将其格式化为小时,分钟和秒。例如,如果您需要将多行数据添加到一起,这将使其更容易。
旁注 - 我正在考虑将 dateofswipe
作为计算列 - 是不是只是intime
的日期部分?