我正在试验一种以高速率将数据插入SQL 2005 Server数据库(在XP SP3上)的程序。 (这是为了收集时间数据,以便我可以评估我设计的不同方面)。SQL Getdate的精确度?
我的基本设置涉及数据插入到像表中的下列(和使用,只是指定的有效载荷字段中的SP):
create table data
(
Id int PRIMARY KEY Identity,
payload datatime not null,
inserted datetime default (getdate()) not null
)
注意,这两个日期时间字段对他们UNIQUE约束以及。
在客户端程序中,我在如此紧密的循环中调用SP,导致.NET DateTime.Now值的精度问题(可能还有线程休眠),从而违反了有效负载的唯一约束。我通过秒表变量,Thread.Sleep()和手动构造“有效载荷”数据的组合来寻址,以便它不违反SQL DateTime字段的分辨率(3.3 mS)。
但是,插件的生成速度在5mS和10mS之间我已经开始发现SQL定义的“Inserted”字段存在问题,在这个字段中,针对唯一的键违规行定期被拒绝。只有当我的插入速度放慢到超过15毫秒时,这个问题才会消失。这个速度与我使用.Net DateTime.Now(我在某个帖子上读取16mS)的精度问题相似,所以我想知道SQL Getdate()函数的实际精度是多少。
那么有人可以告诉我什么是支持GetDate(),并将它绑定到.Net DateTime.Now值相同的源?我应该从中期望什么样的精度?
另一方面,我知道SQL 2008服务器中的DATETIME2类型,因此引发了该系统中GetDate()的精度问题。
为什么在插入的列上需要唯一的约束?身份列将显示他们插入的顺序。我认为数据库生成的时间很容易受到由于并发活动而导致的插入请求处理频率的自然变化,无论前一个插入是否导致页面拆分等,无论如何都不能具有任何语义含义保证像这样限制它。 – 2010-07-31 23:36:44
@马丁..唯一性和顺序不是一回事。我一直在想,你不能同时插入两行 - 但getdate的精度已经证明我错了。但我并不是说我正在做的是世界上最聪明的事情! – 2010-07-31 23:41:54