1

アプリケーション内のさまざまなコントロールの入力時間と残り時間を保持するテーブルがあります。ユーザーが親コントロールに入ると、時間入力レコードがテーブルに挿入され、休暇時間は 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

4

1 に答える 1