触发或计算列?

时间:2012-12-12 13:03:31

标签: c# sql-server-2008

我在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

现在我想要的是当我更新outtimelogduration会自动计算,如

logduration  = outtime - intime

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

1 个答案:

答案 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的日期部分?