वे दो अलग-अलग फ़ंक्शन कॉल हैं जो दो अलग-अलग समय लौटा सकते हैं।
इसके अतिरिक्त GETDATE
एक datetime
देता है डेटाटाइप जिसमें केवल 3-4 एमएस की सटीकता होती है जबकि SYSDATETIME()
एक 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()
. में स्थानापन्न करते हैं फ़ंक्शन को केवल एक बार कॉल किया जाता है जैसा कि नीचे से प्रदर्शित किया जा सकता है।
WHILE DATEDIFF(ms, GETDATE() , GETDATE()) = 0
PRINT 'This will not run in an infinite loop'
मेरे विंडोज़ XP डेस्कटॉप पर GETDATE()
. के साथ लूप चलाते समय और SYSDATETIME
मैं ऐसे परिणाम भी देख सकता हूं जो संकेत करते हैं कि कुछ और भी हो सकता है। शायद एक अलग एपीआई बुला रहा है।
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
है रिपोर्ट 10:16:03.26X
जबकि SYSDATETIME
रिपोर्ट 10:16:03.250