응용 프로그램 내에서 다양한 컨트롤의 입력 시간과 시간을 유지하는 테이블이 있습니다. 사용자가 부모 컨트롤을 입력하면 시간 입력 레코드가 Null 이탈 시간이있는 테이블에 삽입됩니다. 그런 다음 사용자가 자식 컨트롤을 입력하면 부모 휴가 시간은 null에서 업데이트되고 내부 컨트롤에 대해 입력 된 시간은 null 시간의 왼쪽 값이있는 새 레코드에 기록됩니다. 우리가 실행중인 응용 프로그램의 특정 영역 내에서 보낸 시간은 결정적입니다. 문제는 입력 된 시간이 바깥 쪽 컨트롤에 대한 왼쪽 업데이트되기 전에 내부 컨트롤이 기록되고 있다는 것입니다. 시간을 유지하는 테이블은 다음과 같습니다SQL getdate() precision
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]
이 PROC 업데이트가 외부 제어의 시간을두고 내부 통제에 대한 기록을 삽입합니다
update
tTimeCapture
set
Leave = getdate()
where
Leave is null
:
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 proc 디렉토리는 다음과 같다 바깥 쪽 컨트롤이 입력되면 첫 번째 proc는 null leave 시간과 함께 새 레코드를 삽입하는 것으로 호출됩니다. 외부 컨트롤이 남아 있고 내부 컨트롤이 입력되고 proc이 두 번째 proc 내의 getdate()에 외부 컨트롤 떠나기 시간을 업데이트 한 다음 null Leave 값을 가진 내부 컨트롤에 대한 새 레코드를 삽입합니다. 가끔씩 내부 컨트롤의 입력 시간은 외부 컨트롤의 종료 시간보다 앞당겨집니다. 어떻게 이럴 수있어? 그것은 getdate() 정밀도에 문제가 있습니까? 외부 컨트롤의 왼쪽 시간은 2013-10-21 12 : 20 : 36.753 이고 내부 컨트롤에 입력 된 시간은 2013-10-21 12 : 20 : 36.750
모든 질문을 읽을 수는 있지만 정밀도 3 밀리 단계입니다하지 않았나요 : * .000, .003 또는 .007 초 단위로 반올림 정확도 * –