比较SQL Server中两个表中的值 在我的应用程序中,我记录每个阶段每个作业的文件状态(例如开始、预处理、处理、完成等) 我希望,在每天结束时,一个存储过程将运行,它将检查某个作业是否会在特定的次数内给出特定的状态 如果需要,则将消息设置为“成功”。如果没有,则相应地给出错误。(例如,预处理状态缺失,然后将消息设置为“预处理失败”等)

比较SQL Server中两个表中的值 在我的应用程序中,我记录每个阶段每个作业的文件状态(例如开始、预处理、处理、完成等) 我希望,在每天结束时,一个存储过程将运行,它将检查某个作业是否会在特定的次数内给出特定的状态 如果需要,则将消息设置为“成功”。如果没有,则相应地给出错误。(例如,预处理状态缺失,然后将消息设置为“预处理失败”等),sql,sql-server,Sql,Sql Server,我的方法是创建一个查找表,其中将包含 每一份工作,每一种状态,以及它们每天的计数 然后,我将从日志表中统计特定作业的所有状态,并 将其与查找表逐一进行比较。我不确定我是否选择了正确的方法来实现这一点 请导游 日志表: Create Table Log_for_Jobs ( Date_time datetime not null, Job_name varchar(20) not null, Job_status varchar(10) n

我的方法是创建一个查找表,其中将包含 每一份工作,每一种状态,以及它们每天的计数

  • 然后,我将从日志表中统计特定作业的所有状态,并
  • 将其与查找表逐一进行比较。我不确定我是否选择了正确的方法来实现这一点
请导游

日志表:

    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来检查作业,将结果放入此表。

您可以有两个表,一个用于记录作业的历史记录,另一个用于存储可能的状态

JobState

ID | Description
 1 | Start
 2 | Pre processing
 3 | Processing
 4 | Finished
 5 | Error
我认为这里有两种结果,要么你的应用程序在给定的状态下记录了一个错误(例如,在3-处理过程中),要么它停止并不再记录任何内容。我添加了5-Error来表示应用程序错误状态

接下来要考虑的是,是否需要记录每个状态,或者可以覆盖以前的状态吗?记录每个状态的两个可能原因是了解每个步骤所用的时间,以及在每个步骤中记录额外的信息(例如,处理150行等)。但是如果不需要它,您可以用下一个状态更新该作业的行,如果成功,它应该以4-Finished结束

工作历史记录

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的所有作业,就可以成功完成所有作业(然后对它们进行处理)

并选择所有作业,按作业id分组,对于有错误的作业,最大(状态)为4。然后,您可以对max状态执行一些操作,它要么是5-Error(使用表中记录的错误消息),要么是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
选择JobID,将Max(JobStateId)作为EndJobStateId,将Min(JobTime)作为StartTime,将Max(JobTime)作为EndTime
从职业历史
按JobID分组
具有Max(JobStateId)4
SELECT JobID, Max(JobStateId) as EndJobStateId, Min(JobTime) as StartTime, Max(JobTime) as EndTime
FROM JobHistory
GROUP BY JobID
HAVING Max(JobStateId) <> 4