2011-01-24 5 views
1

RIAサービスは、サーバーによって生成されたプロパティを設定するために特別な処理を行います。そのような値の1つはModifiedDateフィールドです。私のテーブルでは、キーではないID列があります。データベース生成値を取得するために、RIAは、送信したばかりのキー値を使用して、送信中に挿入したばかりのレコードを照会します。これは、次のクエリでこれを処理します。DateTimeの精度のためにサブミット操作が失敗する

[WorkItemId]、[WorkItemStatusCode]、[有効日]がテーブルのキーです。

EXEC sp_executesqlをN'insertは[DBO]。[WorkItemHistory] ​​ ([WorkItemId]、[WorkItemStatusCode]、[EffectiveDate]、 [DateCreated]、[DateModified]、[ModifiedByUserId]、[StatusReason]、[説明]、[MarketId]) 値(@ 0、@@ 2,3,4,5,6,7,7 null) [dbo]の[iWorkItemHistoryId] を選択します。[WorkItemHistory ] ここで@@ ROWCOUNT> 0および[WorkItemId] = @ 0および[WorkItemStatusCode] = @ 1および[有効期限] = @ 2 '、N' @ 0 int、@ 1 varchar(25)、@ 2 datetime2 7、nvarchar(100)、@ 7 nvarchar(255) '、@ 0 = 1、@ 1 =' CN 7 datetime2(7)、4 datetime2(7)、5 nvarchar(50) CL '、@ 2' '2011-01-24 19:32:27.5028893'、@ 3 = '2011-01-24 11:32:27.5018892'、@ 4 = '2011-01-24 11:32: 6 = N'NewDescription @、5 = N'at @ '27.5008891' '、7 = N'New作業項目@ -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を格納するとき、精度の低下は検出されません。

ただし、主キーで日付を使用すると、値が正確に照会されます。 DateTime.Nowの.NETの精度と一致させるには、DateTime2を使用する必要があります。

キーフィールドのDateTime2に切り替えると問題が解決しました。

通常、キーフィールドの場合と同じように、単一の日付ではなく日付の範囲を照会するため、日付フィールドの精度の損失は通常検出されません。

関連する問題