簡體   English   中英

比較SQL Server中兩個表中的值

[英]Compare values in two tables in SQL Server

  1. 在我的應用程序中,我記錄每個階段每個作業的文件狀態(例如,開始,預處理,處理,完成等)。
  2. 我希望在每天結束時運行一個存儲過程,它將檢查是否期望某些作業在一定次數下處於某種狀態。
  3. 如果期望,則將消息設置為“成功”。 如果不是,那么它會給出錯誤信息(例如,缺少預處理狀態,然后將消息設置為“預處理失敗”等)。
  4. 我的方法是創建一個查找表,其中將包含每個作業,每個狀態的理想情況以及當天的計數。

    • 然后我將從日志表中獲取特定作業的所有狀態的計數,
    • 將其與查找表一一比較。 我不確定我是否選擇正確的方法來實現這一目標。

    請指導。

日志表:

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM