[英]Compare values in two tables in SQL Server
我的方法是創建一個查找表,其中將包含每個作業,每個狀態的理想情況以及當天的計數。
請指導。
日志表:
Create Table Log_for_Jobs
(
Date_time datetime not null,
Job_name varchar(20) not null,
Job_status varchar(10) null,
Log_message varchar(100) null
)
然后創建一個SP來檢查作業,將結果放入此表中。
您可能有兩個建議的表,一個用於記錄作業的歷史記錄,另一個用於存儲可能的狀態。
工作狀態
ID | Description
1 | Start
2 | Pre processing
3 | Processing
4 | Finished
5 | Error
我認為您在這里有兩個結果,要么您的應用程序在給定狀態(例如3-處理期間)記錄錯誤,要么停止並不再記錄任何內容。 我添加了5-錯誤以表示應用程序錯誤狀態。
接下來要考慮的是您需要記錄每個狀態還是可以覆蓋先前的狀態? 記錄每個狀態的兩個可能原因是知道每個步驟所花費的時間,以及與每個步驟一起記錄額外的信息(例如,處理150行等)。 但是,如果不需要,您可以使用下一個狀態更新該作業的行,並且為了成功,該行應以4-已完成結束。
工作歷史
ID | JobID | JobTime | JobStateID | Message
1 | 55 | 1 Jan 2015 9:45am | 1 | Start file c:\test.txt
2 | 55 | 1 Jan 2015 9:47am | 2 | Preprocessing 117 rows...
3 | 55 | 1 Jan 2015 9:55am | 3 | Processing
4 | 55 | 1 Jan 2015 9:57am | 5 | ERROR: Unexpected character at line 321 - '@'
我假設它必須完成上一步才能進入下一個步驟。 如果是這種情況,那么您只需選擇state = 4的所有作業即可成功完成所有任務(然后對它們執行一些操作)。
SELECT *
FROM JobHistory
WHERE State = 4
// AND JobTime is within the last day?
然后選擇所有作業,並為有錯誤的作業按具有max(state)<> 4的作業ID分組。 然后,您可以在max狀態下執行某項操作,該狀態可能是5-錯誤(使用記錄在表中的錯誤消息)或1、2、3,因此請報告此步驟已停止。
SELECT JobID, Max(JobStateId) as EndJobStateId, Min(JobTime) as StartTime, Max(JobTime) as EndTime
FROM JobHistory
GROUP BY JobID
HAVING Max(JobStateId) <> 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.