Database 由于日期时间精度,提交操作失败

Database 由于日期时间精度,提交操作失败,database,datetime,submit,ria,precision,Database,Datetime,Submit,Ria,Precision,RIA服务会做一些特殊的事情来填充服务器生成的属性。其中一个值是表中的ModifiedDate字段,我有一个不是键的标识列。为了获得数据库生成的值,RIA使用它知道的刚刚插入的行的键值,查询它在提交期间刚刚插入的记录。它通过以下查询处理此问题: [WorkItemId]、[WorkItemStatusCode]、[EffectiveDate]是表的键 exec sp_executesql N'insert[dbo].[WorkItemHistory] ([WorkItemId]、[WorkIte

RIA服务会做一些特殊的事情来填充服务器生成的属性。其中一个值是表中的ModifiedDate字段,我有一个不是键的标识列。为了获得数据库生成的值,RIA使用它知道的刚刚插入的行的键值,查询它在提交期间刚刚插入的记录。它通过以下查询处理此问题:

[WorkItemId]、[WorkItemStatusCode]、[EffectiveDate]是表的键

exec sp_executesql N'insert[dbo].[WorkItemHistory] ([WorkItemId]、[WorkItemStatusCode]、[EffectiveDate]、[DateCreated]、[DateModified]、[ModifiedByUserId]、[StatusReason]、[Description]、[MarketId]) 值(@0、@1、@2、@3、@4、@5、@6、@7、null) 选择[iWorkItemHistoryId] 来自[dbo]。[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='1='CNCL',@2='2011-01-24 19:32:27.502893',@3='2011-01-01:27'>,@4='2011-01-2411:32:27.5008891',@5=N'at',@6=N'NewDescription',@7=N'NewWorkItem-1/19/2011'

'2011-01-24 19:32:27.5028893不完全是数据库中存储的内容。它四舍五入,因此“Where”子句失败

'2011-01-2419:32:27.503'在数据库中

为了解决这个问题,我可以将日期截断为“2011-01-24 19:32:27”,或者我可以从标识中删除日期,或者我可以从iWorkItemHistoryId中删除自动递增计数器,这样在插入期间它就不会重新查询值

谢谢

把它弄明白了

当我们通常存储CreatedDate和ModifiedDate时,无法检测到精度的损失

但是,当我们在主键中使用日期时,会精确地查询值。DateTime2应该用于匹配.NET中DateTime.Now的精度

在键字段上切换到DateTime2解决了问题

日期字段的精度损失通常不会被检测到,因为我们通常查询日期范围,而不是单个日期,关键字段就是这样。

解决了这个问题

当我们通常存储CreatedDate和ModifiedDate时,无法检测到精度的损失

但是,当我们在主键中使用日期时,会精确地查询值。DateTime2应该用于匹配.NET中DateTime.Now的精度

在键字段上切换到DateTime2解决了问题


日期字段的精度损失通常不会被检测到,因为我们通常查询日期范围,而不是单个日期,这在键字段中是必须的。

不要按键的使用方式使用日期,时间是很棘手的事情,要以可靠的方式加入,不要按键的使用方式使用日期,时间是一件棘手的事情,需要以可靠的方式加入