我有一个数据库表如下:
CREATE TABLE some_table
(
price FLOAT NOT NULL,
size FLOAT NOT NULL,
retrieved DATETIME2 DEFAULT SYSUTCDATETIME(),
runner_id INT NOT NULL,
FOREIGN KEY (runner_id) REFERENCES runner(id),
PRIMARY KEY (retrieved, price, size, runner_id)
);
CREATE INDEX some_table_index ON some_table (runner_id);
此表由从Web服务检索的一组价格/大小数据填充,该服务本质上是时间序列的。据我所知(我已经在我的代码中放置了一些比较逻辑以确保)价格和大小永远不会在从Web服务检索的一组条目中重复。但是,它们可能会在随后的与同一个跑步者相关的价格/尺寸数据请求中重复出现。
我正在获得间歇性的主键约束重复键异常,即使我正在从高分辨率日期时间值以及表列的其余部分形成我的键。在这个阶段,我正在考虑删除复合键以支持自动生成的主键。任何人都可以根据表模式建议为什么会发生这种情况?考虑到代码的性质和日期时间值的分辨率,我认为我不太可能同时插入具有重复值的两组独立的价格/尺寸数据。我想这是可能的 - 我使用异步方法与数据库和Web服务进行交互。
由于
答案 0 :(得分:1)
每个runner_id是否批量插入多个行?可能在不到100纳秒的时间内处理相同的价格和尺寸。这将导致它们不是唯一的。
SQL Server使用GetSystemTimeAsFileTime()Windows API获取日期和时间值。准确性取决于运行SQL Server实例的Windows的计算机硬件和版本。此API的精度固定为 100纳秒。可以使用GetSystemTimeAdjustment()Windows API确定准确性。