これらは、2つの異なる時間を返すことができる2つの異なる関数呼び出しです。
さらに、GETDATE
datetime
を返します SYSDATETIME()
に対して、精度が3〜4ミリ秒しかないデータ型 datetime2(7)
を返します データ・タイプ。
両方の呼び出しがまったく同時に返される場合でも、丸めが原因で発生している問題が発生する可能性があります。
DECLARE @D1 DATETIME2 = '2012-08-18 10:08:40.0650000'
DECLARE @D2 DATETIME = @D1 /*Rounded to 2012-08-18 10:08:40.067*/
SELECT DATEDIFF(ms, @D1 , @D2) /*Returns 2*/
GETDATE()
で置き換えると、もう1つの答えは正しくありません。 以下からわかるように、この関数は1回だけ呼び出されます。
WHILE DATEDIFF(ms, GETDATE() , GETDATE()) = 0
PRINT 'This will not run in an infinite loop'
GETDATE()
を使用してWindowsXPデスクトップでループを実行する場合 およびSYSDATETIME
しかし、他の何かが起こっている可能性があることを示す結果も見ることができます。おそらく別のAPIを呼び出しています。
CREATE TABLE #DT2
(
[D1] [DATETIME2](7),
[D2] [DATETIME2](7)
)
GO
INSERT INTO #DT2
VALUES(Getdate(), Sysdatetime())
GO 100
SELECT DISTINCT [D1],
[D2],
Datediff(MS, [D1], [D2]) AS MS
FROM #DT2
DROP TABLE #DT2
以下の結果の例
+-----------------------------+-----------------------------+-----+
| D1 | D2 | MS |
+-----------------------------+-----------------------------+-----+
| 2012-08-18 10:16:03.2500000 | 2012-08-18 10:16:03.2501680 | 0 |
| 2012-08-18 10:16:03.2530000 | 2012-08-18 10:16:03.2501680 | -3 |
| 2012-08-18 10:16:03.2570000 | 2012-08-18 10:16:03.2501680 | -7 |
| 2012-08-18 10:16:03.2600000 | 2012-08-18 10:16:03.2501680 | -10 |
| 2012-08-18 10:16:03.2630000 | 2012-08-18 10:16:03.2501680 | -13 |
| 2012-08-18 10:16:03.2630000 | 2012-08-18 10:16:03.2657914 | 2 |
| 2012-08-18 10:16:03.2670000 | 2012-08-18 10:16:03.2657914 | -2 |
| 2012-08-18 10:16:03.2700000 | 2012-08-18 10:16:03.2657914 | -5 |
| 2012-08-18 10:16:03.2730000 | 2012-08-18 10:16:03.2657914 | -8 |
| 2012-08-18 10:16:03.2770000 | 2012-08-18 10:16:03.2657914 | -12 |
| 2012-08-18 10:16:03.2800000 | 2012-08-18 10:16:03.2814148 | 1 |
+-----------------------------+-----------------------------+-----+
関心のある行は
です。| 2012-08-18 10:16:03.2600000 | 2012-08-18 10:16:03.2501680 | -10 |
| 2012-08-18 10:16:03.2630000 | 2012-08-18 10:16:03.2501680 | -13 |
この不一致は大きすぎて丸めの問題にはならず、GETDATE
の複数の行に問題が存在するため、2つの関数の呼び出し間の遅延を伴うタイミングの問題だけではありません。 レポート10:16:03.26X
一方、SYSDATETIME
レポート10:16:03.250