2015-12-25 4 views
0
  1. В моем приложении я регистрирую статус файла для каждого задания на каждом этапе (например, запуск, предварительная обработка, обработка, завершение и т. Д.).
  2. Я хочу, чтобы в конце каждого дня запускалась одна хранимая процедура, и она проверяет, будет ли определенная работа давать определенный статус определенное количество раз.
  3. Если ожидается, он устанавливает сообщение как «Успешно». Если нет, то он дает ошибку соответственно (например, состояние предварительной обработки отсутствует, а затем задано сообщение как «Предварительная обработка не удалась» и т. Д.).
  4. Мой подход заключается в создании одной таблицы поиска, которая будет содержать идеальные сценарии для каждой работы, каждого состояния и их количества в течение дня.Сравнение значений в двух таблицах в SQL Server

    • тогда я буду считать количество всех статусов для конкретной работы из моего журнала таблицы и
    • сравнить его с посмотреть таблицу по одному. Я не уверен, что я выбираю правильный путь для реализации этого.

    Просим руководствоваться.

ответ

0

Вход Таблица:

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 
    ) 

, а затем создать СП для проверки рабочих мест, поместить результат в эту таблицу.

0

У вас может быть две таблицы, как вы предлагаете, одну для регистрации истории ваших заданий, а другую для хранения возможных состояний.

JobState

ID | Description 
1 | Start 
2 | Pre processing 
3 | Processing 
4 | Finished 
5 | Error 

Я думаю, что у вас есть два результата здесь, либо приложение регистрирует ошибку в данном состоянии (например, в течение 3 - обработки) или останавливается и ничего не записывать дальше. Я добавил 5 - Ошибка для представления состояния ошибки приложения.

Следующее, что нужно учитывать, - это выполнить запись каждого состояния или перезаписать предыдущее состояние? Две возможные причины для записи каждого состояния - это знать время, затрачиваемое на каждом шаге, и записывать дополнительную информацию вместе с каждым шагом (например, обрабатывать 150 строк и т. Д.). Но если вам не нужно, вы можете просто обновить строку для этой работы в следующем состоянии, и для успеха она должна закончиться 4 - Готово.

JobHistory

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? 

И выберите все задания, группа по ID работы, имеющей максимальный (состояние) <> 4 для тех, кто с ошибками. Затем вы можете сделать что-то с максимальным состоянием, либо 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 
Смежные вопросы