Я бы согласился с ответом Марка Байерса как на реальное решение. Просто хотел добавить, что до SQL Server 2008 точность даты и времени составляла около 3,33 мс. Цитата из MSDN :
значения даты и времени округляются до
с шагом .000, .003 или .007
второй ...
Таким образом, добавление 1 мс к датам не решит вашу проблему.
, например
SELECT DATEADD(ms, 1, '2010-04-12T12:00:00.000') -- outputs time still as x.000s
SELECT DATEADD(ms, 2, '2010-04-12T12:00:00.000') -- output: .003s
SELECT DATEADD(ms, 3, '2010-04-12T12:00:00.000') -- output: .003s
SELECT DATEADD(ms, 4, '2010-04-12T12:00:00.000') -- output: .003s
SELECT DATEADD(ms, 5, '2010-04-12T12:00:00.000') -- output: .007s
SELECT DATEADD(ms, 6, '2010-04-12T12:00:00.000') -- output: .007s
SELECT DATEADD(ms, 7, '2010-04-12T12:00:00.000') -- output: .007s
SELECT DATEADD(ms, 8, '2010-04-12T12:00:00.000') -- output: .007s
SELECT DATEADD(ms, 9, '2010-04-12T12:00:00.000') -- output: .010s
На самом деле вам нужно было бы добавлять 3 мс каждый раз. В лучшем случае это будет работать для вашей ситуации, но на самом деле это не будет похоже на «чистое» решение, немного взлома. В худшем случае это просто не будет работать / масштабироваться, в зависимости от объемов данных / плотности распространения данных. Но вы должны знать о точности даты и времени, если вы идете по этому маршруту.
SQL Server 2008 вводит DATETIME2 с точностью 100 нс. См. Ответ DaveK.