SQL Server查询中的重复时间戳:如何添加毫秒并避免重复?

SQL Server查询中的重复时间戳:如何添加毫秒并避免重复?,sql,sql-server,Sql,Sql Server,我在SQL Server中有此表[myTable]: ID | Timestamp [datatype= datetime] 1 | 2013-08-05 23:09:02.000 2 | 2013-11-05 23:00:00.000 3 | 2013-08-05 23:09:02.000 4 | 2013-11-05 23:00:00.000 5 | 2014-01-01 22:00:00.000 在表中,我[有时]有一些重复的时间戳。使用SELECT语句,如何向每个重复的值添加

我在SQL Server中有此表[myTable]:

ID | Timestamp [datatype= datetime]
1  | 2013-08-05 23:09:02.000
2  | 2013-11-05 23:00:00.000
3  | 2013-08-05 23:09:02.000
4  | 2013-11-05 23:00:00.000
5  | 2014-01-01 22:00:00.000
在表中,我[有时]有一些重复的时间戳。使用SELECT语句,如何向每个重复的值添加1毫秒,以便只有唯一的时间戳

产出将是:

ID | Timestamp
1  | 2013-08-05 23:09:02.000
2  | 2013-11-05 23:00:00.000
3  | 2013-08-05 23:09:02.001
4  | 2013-11-05 23:00:00.001
5  | 2014-01-01 22:00:00.000

提前感谢。

如果时间戳列不是键的一部分,并且您只想避免重复,那么可以改用rowversion

SELECT id, DATEADD(MILLISECOND,ROW_NUMBER() OVER (PARTITION BY Timestamp ORDER BY Id)-1,Timestamp) Timestamp
CREATE TABLE table (
--,TIMESTAMP rowversion
)

时间戳的数据类型是什么?这听起来是一个非常糟糕的做法。为什么您的时间戳需要是唯一的?时间戳是PK?哦,天哪。如果你加上1毫秒,现在记录又被复制了一行,你会继续加上毫秒直到你不再被复制吗?你能看到在一个繁忙的系统上这会变成一团乱麻吗?我不明白如果PKs被修改了,你怎么能查询这个系统。这个想法很好,但不适用于
datetime
,因为它没有1毫秒的精度。@Dalek更新。我阅读了你需要添加到字段中的问题,因此它们是唯一的。你真的想添加
ID
毫秒而不是
1
或者
CNT
。顺便说一句,你的问题和这里的@mordechai一样。“datetime值被舍入为.000、.003或.007秒的增量,”添加了ID*10以解决舍入问题。我怀疑这是否是最终解决方案,因为理想的方法似乎有缺陷。
CREATE TABLE table (
--,TIMESTAMP rowversion
)