2016-11-10 47 views
9

如果我有ZKTime機器來註冊員工的出勤。如何恢復最近插入的日期

有時在SQL Server數據庫有錯日後交易的本機插入散裝像

8-2103而不是11-2016

enter image description here


enter image description here


如果我無法檢測到問題,該問題的可能原因是什麼,以及如何恢復到正確的日期?

+1

如果插入了錯誤的日期,您將如何知道正確的日期是什麼? – mendosi

+0

@mendosi:我不知道我嘗試通過'S_T_NO'的順序來猜測最近的日期 –

+0

看起來像是插入時使用的錯誤日期時間格式...您無法恢復 - 它是損壞的數據。 – Narf

回答

4

我看你提供的供應商聯繫,並沒有在這種情況下幫助。由於SQL Server以外的項目,我們恐怕無法回答這個問題。我相信您需要聯繫供應商支持部門。

你需要找出的問題是:

  1. 如何將時間機器計算檢查時間數據?
  2. 時間機器如何存儲CheckTime數據?
  3. 機器如何創建要導出到SQL Server的文件?

這似乎是系統如何記錄CheckTime數據或如何將數據導出/寫入SQL服務器的問題。

至於糾正問題一個基本的更新聲明將修復它,但由於有不同的日期,你將需要爲每個案件編寫一個獨特的更新。

0

,如果它是靜態的錯誤,您可以

update table set Checktime = DATEADD(YEAR, -97, dateadd(MONTH,-4,checktime)) where checktime > '2017-12-12'

例如

+0

不,它不是一個靜態錯誤 –

1

一個可能的解決方案是利用觸發器來驗證日期並相應地更新日期。假設表中的主鍵爲id,如果新插入的行的日期超過了今天,則可以將其重置爲當前日期時間,因爲員工的出勤記錄將來不會出現。

CREATE TRIGGER CorrectTheDate on Config 
FOR INSERT 
AS 

DECLARE @CT DateTime 
DECLARE @id int 

SELECT @CT = i.CheckTime FROM inserted i; 
SELECT @id= i.id FROM inserted i; 

if(@CT >= DATEADD(dd,1,getdate())) 
UPDATE MyTable SET CheckTime=getdate() WHERE [email protected] 

GO 
+0

雖然這個想法是好的,但代碼需要一些調整,因爲它假定觸發器一次會觸發一條記錄,而且當服務器不可用時,大多數機器可以脫機工作網絡斷開或服務器維護等。在這種情況下,讀者將在不同於讀者實際時間的時間將記錄發送到服務器。 –