アプリケーション内のさまざまなコントロールの入力時間と残り時間を保持するテーブルがあります。ユーザーが親コントロールに入ると、時間入力レコードがテーブルに挿入され、休暇時間は null になります。その後、ユーザーがその中に子コントロールを入力すると、親の休暇時間が null から更新され、内部コントロールに入力された時間は新しいレコードに残り時間の値が null で書き込まれます。実行中のアプリケーションの特定の領域で費やされる時間は非常に重要です。問題は、外部コントロールの残り時間が更新される前に、内部コントロールの入力時間が記録されることです。時間を維持するテーブルは次のとおりです。
CREATE TABLE [dbo].[tTimeCapture](
[RECNUM] [int] IDENTITY(1,1) NOT NULL,
[Store_ID] [int] NULL,
[Tab_ID] [int] NULL,
[Dept_ID] [int] NULL,
[SubDept_ID] [int] NULL,
[Enter] [datetime] NULL,
[Leave] [datetime] NULL,
[IsStoreCall] [bit] NOT NULL,
[Upload] [int] NOT NULL,
CONSTRAINT [PK_tTimeCapture] PRIMARY KEY CLUSTERED
(
[RECNUM] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
このプロシージャは、外部コントロールの残時間を更新し、内部コントロールのレコードを挿入します。
if exists (
select
*
from
tTimeCapture
where
Leave is null
)
begin
exec sEndTimeCapture
end
INSERT INTO
tTimeCapture(
Store_ID,
Tab_ID,
Dept_ID,
SubDept_ID,
Enter,
Leave,
IsStoreCall,
Upload
)
SELECT
@Store_ID as Store_ID,
@Tab_ID as Tab_ID,
@Dept_ID as Dept_ID,
@Subdept_ID as SubDept_ID,
GETDATE() as Enter,
null as Leave,
@isStoreCall as IsStoreCall,
0 as Upload
sEndTimeCapture プロシージャは次のとおりです。
update
tTimeCapture
set
Leave = getdate()
where
Leave is null
外側のコントロールに入ると、最初のプロシージャが呼び出され、null の休暇時間で新しいレコードが挿入されます。外側のコントロールが残され、内側のコントロールが入力され、proc は 2 番目の proc 内で外側のコントロールの leave 時間を getdate() に更新します。その後、null の leave 値を持つ内側のコントロールの新しいレコードを挿入します。内側のコントロールの開始時刻が、外側のコントロールの終了時刻よりも前になることがよくあります。どうすればいいの?getdate() の精度の問題ですか? 外側のコントロールの残り時間: 2013-10-21 12:20:36.753、内側のコントロールに入力された時間は 2013-10-21 12:20:36.750