2013-07-13 54 views
1

我正在寫一個需要準確時間的應用程序(精確到幾秒鐘,沒什麼瘋狂的)。該應用程序使用C#,並且與SQL Server連接,都位於同一臺計算機上。在我的應用程序代碼中,我從NTP服務器獲取時間,但我希望能夠編寫使用GETDATE()的SQL語句,而不必在SQL語句中寫入當前時間。如何在系統時間關閉時使用SQL Server的GETDATE()?

不幸的是,隨着時間的推移,服務器上的系統時間不會保持準確。有沒有辦法在系統時間關閉時使用GETDATE()?我寧願避免編寫從NTP服務器獲取時間的代碼,然後更新系統時間。

+0

你可以在sql服務器上運行一個真正的ntp客戶端,以保持它的時鐘(並因此保持getdate())同步。 – StrayCatDBA

回答

5

您不需要自己編寫任何代碼來與NTP對話 - 您應該只需啓用Windows時間服務即可自行完成。如果您發現您的系統時鐘仍然漂移得太快,這表明計算機可能有問題 - 時間服務應該經常同步以保持非常接近。

編輯:如果如建議的Windows時間服務不能保持足夠的準確性,我敢肯定有很多其他的NTP客戶端將作爲Windows服務運行。我非常確定我曾經運行過NetTime ......我絕對不會建議你自己寫,儘管這只是因爲它已經完成了。

+0

問題是Windows時間服務的設計是爲了保持時鐘足夠接近kerberos身份驗證的工作(kerberos票需要5分鐘的窗口)。它會在幾秒鐘內保持時鐘,但不會接近正確的NTP解決方案。 – StrayCatDBA

+0

@StrayCatDBA:令我感到驚訝 - 但正如您在評論中所說的,您可以輕鬆地運行另一個NTP服務。將編輯到我的答案。 –

+0

[windows時間服務概述](http://technet.microsoft.com/en-us/library/cc773061(v = ws.10).aspx#BKMK_WTS)另外,[kb939322](http:// support。 microsoft.com/kb/939322/en-us)描述了準確性的限制。是的,之前我被這個咬傷了。 – StrayCatDBA

相關問題