0

employeeswipe_tblSQL 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

今私が欲しいのは、更新outtimeすると次のlogdurationように自動的に計算されることです

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)
)

私のコメントに示されているように、2つの間の違いはdatetime期間であり、別の期間ではありませんdatetime。SQL Serverにはタイムスパンタイプがないため、差を秒単位で保持するのがおそらく最善です。表示中に時間、分、秒にフォーマットします。これにより、たとえば、数行分のデータを合計する必要がある場合に簡単になります。


補足-dateofswipe計算列の作成も検討していました-の日付部分だけではありませんintimeか?

于 2012-12-12T13:20:02.410 に答える