Как отслеживать записи в SQL и выполнять некоторые действия, если достигнуто определенное условие?

#sql #database #tsql

#sql #База данных #tsql

Вопрос:

Допустим, у меня есть таблица Equipment и таблица MaintenanceSchedule в базе данных SQL.

Поэтому мне нужно обновить значение поля уведомления (бит) в таблице оборудования, чтобы оно было истинным, если поле даты в таблице MaintenanceSchedule приблизилось.

Итак, как отслеживать некоторые данные, хранящиеся в базе данных, и выполнять некоторые действия, если достигнуто определенное условие?

Комментарии:

1. Звучит как триггер

2. Нет, я хочу отслеживать данные, хранящиеся в базе данных, по времени. не при выполнении инструкции update — например.

3. Может быть, это похоже на работу, но как это реализовать?

4. Ох. Я вижу. Задание, которое выполняется каждую минуту или час или что-то в этом роде, для проверки в maintenanceschedule таблице записей, которые прошли текущий или что-то в этом роде и обновили notification битовое поле в вашей equipment таблице. Да, это звучит как работа.

5. задания, насколько я понимаю, являются запланированными хранимыми процедурами. Итак, напишите SP, который выполняет это (что было бы простым UPDATE утверждением), а затем запланируйте задание. Если вы застряли в том, как написать UPDATE инструкцию sql, или как поместить это в хранимую процедуру, или как запланировать этот SP, то, возможно, для этой конкретной проблемы подойдет новый вопрос SO.

Ответ №1:

Вероятно, для этого следует использовать задание sql. Проблема в том, что вы хотите, чтобы этот процесс был устойчивым в случае сбоя.

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

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

Затем вы можете запланировать это как задание, которое просто выполняет эту процедуру и настроено на выполнение с желаемой частотой (ежечасно, ежедневно, ежемесячно, что угодно). При таком типе реализации вы можете запускать задание так часто, как вам нравится, поскольку оно не будет повторно выполняться для той же даты.

Ответ №2:

Я бы создал задание sql server, чтобы проверить, подходит ли окно обслуживания, и установил соответствующий флаг.

Комментарии:

1. И как реализовать расписание для этого задания? каждый день?

2. Зависит от того, как часто у вас есть окна обслуживания и их продолжительность, а также зависит от того, хотите ли вы установить этот флаг заранее с заданным промежутком времени.