2011-01-24 3 views
1

RIA 서비스는 서버에서 생성 된 등록 정보를 채우기 위해 특별한 작업을 수행합니다. 이러한 값 중 하나가 ModifiedDate 필드입니다. 내 테이블에 키가 아닌 ID 열이 있습니다. 데이터베이스 생성 값을 얻으려면 RIA는 방금 삽입 한 행에 대해 알고있는 키 값을 사용하여 제출하는 동안 방금 삽입 한 레코드를 쿼리합니다. 이 쿼리는 다음 쿼리로 처리합니다.제출 작업이 DateTime 정밀도로 인해 실패합니다.

[WorkItemId], [WorkItemStatusCode], [EffectiveDate]이 테이블의 키입니다.

간부 sp_executesql을 N'insert [DBO]. WorkItemHistory] ([WorkItemId], [WorkItemStatusCode] 는 [EFFECTIVEDATE]는 [DateCreated], [DateModified], [ModifiedByUserId], [StatusReason] [설명 ], [MarketId]) 값 (@ 0, @@ 2, @ 4, @ 6, @ 7, null) [dbo]의 [iWorkItemHistoryId] 을 선택하십시오. [WorkItemHistory ] 여기서 @@ ROWCOUNT> 0 및 [WorkItemId] = @ 0 및 [WorkItemStatusCode] = @ 1 및 [EffectiveDate] = @ 2 ', N'@ 0 int, @ 1 varchar (25), @ 2 datetime2 7, @ 3 datetime2 (7), @ 4 datetime2 (7), @ 5 nvarchar (50), @ 6 nvarchar (100), @ 7 nvarchar (255) ', @ 0 = 1, @ 1 ='CN CL ', @ 2 ='2011-01-24 19 : 32 : 27.5028893 ', @ 3 ='2011-01-24 11 : 32 : 27.5018892 ', @ 4 ='2011-01-24 11:32 : 27.5008891 ', 5 = N'at @'= 6 N'NewDescription '@ 7 = N'New WorkItem에서 -1/19/2011'

'2011-01-24 @ 19 : 32 : 27.5028893 db에 정확히 저장되는 것은 아닙니다. 반올림되어 'Where'절이 실패합니다.

'2011-01-24 19 : 32 : 27.503'은 db입니다.

이 문제를 해결하려면 날짜를 '2011-01-24 19:32:27'로자를 수 있습니다. 또는 날짜를 ID에서 가져올 수 있습니다. 그렇지 않으면 iWorkItemHistoryId의 자동 증가 카운터를 사용할 수 있습니다. 삽입하는 동안 값을 재 쿼리하지 않습니다.

감사합니다.

+0

키를 사용해야하는 방식으로 날짜를 사용하지 마십시오. 신뢰할 수있는 방식으로 시간을 조율하는 것은 까다 롭습니다. –

답변

1

알아 냈습니다.

일반적으로 CreatedDate 및 ModifiedDate를 저장할 때 정밀도가 손실되는 것을 감지 할 수 없습니다.

그러나 기본 키에서 날짜를 사용할 때 값은 정확하게 쿼리됩니다. DateTime2는 DateTime.Now에 대해 .NET의 정밀도를 일치시키는 데 사용되었습니다.

키 필드에서 DateTime2로 전환하면 문제가 해결됩니다.

일반적으로 날짜 필드에 대한 정밀도의 손실은 키 필드의 경우와 같이 단일 날짜가 아닌 날짜 범위를 쿼리하기 때문에 일반적으로 감지되지 않습니다.

관련 문제