比较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