Ano, SQL Server zaokrouhlí čas na 3.(3) milisekundy:
SELECT CAST(CAST('2009-01-01 00:00:00.000' AS DATETIME) AS BINARY(8))
SELECT CAST(CAST('2009-01-01 00:00:01.000' AS DATETIME) AS BINARY(8))
0x00009B8400000000
0x00009B840000012C
Jak můžete vidět, tyto DATETIME 's se liší o 1 druhé a jejich binární reprezentace se liší o 0x12C , tedy 300 v desítkové soustavě.
Důvodem je SQL Server ukládá time část DATETIME jako číslo 1/300 druhý tikot od půlnoci.
Pokud chcete větší přesnost, musíte uložit TIME část jako samostatná hodnota. Například uložte čas zaokrouhlený na sekundy jako DATETIME , a milisekundy nebo jakoukoli přesnost, kterou potřebujete jako INTEGER v jiných sloupcích.
To vám umožní používat komplexní DATETIME aritmetika, jako je přidávání měsíců nebo hledání dnů v týdnu v DATETIME 's a vy můžete jen přidat nebo odečíst milisekundy a zřetězit výsledek jako .XXXXXX+HH:MM získat platný XML zastoupení.