Мониторинг вычисленных данных (возраст человека) в SQL Server - PullRequest
0 голосов
/ 03 марта 2010

У меня есть таблица, tblClient, в которой хранится дата рождения клиента в поле типа datetime, DOB.

Цель заключается в том, что, когда клиенту исполняется 65 лет (необходимо рассчитать через DOB), мне нужно вставить новую запись в другую таблицу.

Но поскольку возраст клиента не изменяется из-за транзакции с базой данных (INSERT, UPDATE, DELETE), триггер исключен.

Что было бы хорошей идеей для отслеживания таких изменений?

Ответы [ 7 ]

2 голосов
/ 03 марта 2010

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

2 голосов
/ 03 марта 2010

создайте задание агента sql, которое будет выполняться ежедневно или ежечасно, которое будет выполнять эти вычисления с T-SQL, а затем, если кто-то достигнет 65, оно выполнит вставку

1 голос
/ 03 марта 2010

Как насчет нового поля с датой age65. Вычислите его один раз при вставке записи, после чего вы можете запросить содержание вашего сердца в этом поле. Вам нужно будет сделать это триггером (и учитывать обновления, они редки для полей DOB, но возможны, когда они неправильно напечатаны). Теперь, когда я думаю об этом, вычисленное поле, вероятно, будет работать вместо триггера.

Затем запустите ежедневное задание, чтобы поймать любого, кому исполнилось 65 лет с момента последнего запуска задания. Обязательно позаботьтесь об этом, чтобы в случае сбоя задания однажды люди из этого списка были отобраны при следующем запуске.

Причина, по которой я предлагаю это, состоит в том, что подсчет возраста каждого человека в вашей базе данных каждый день - такая трата ресурсов для расчета, который действительно нужно сделать только один раз. Хорошо, ничего страшного, когда у тебя 100 человек, большая проблема, когда у тебя миллион. Делать так, чтобы рассчитать миллион записей, чтобы определить три, которые вам нужны, больно. Делать это один раз при вводе данных, не так уж и плохо.

1 голос
/ 03 марта 2010

Я собираюсь предложить другой подход - запускать что-то каждый раз, когда DOB обновляется (или добавляется), который вычисляет период с этого момента, пока первый человек не достигнет 65. Затем (повторно) запланируйте задание для запуска в это время .

Кроме того, я не могу поверить, что вам нужно вставлять эту строку в секунду, когда они достигают 65, так что однократная процедура, которая вычисляет сегодняшних новых 65-летних, может показаться достаточно хорошей?

1 голос
/ 03 марта 2010

вы можете создать задание агента SQL Server в базе данных, используя SQL Server Management Studio для этого:

http://www.databasedesign -resource.com / SQL-сервера jobs.html

Установите ежедневную работу на EXEC BirthdayProcessingProcedure или как хотите ее назвать.

Пока база данных запущена и работает, JOB будет работать в соответствии с установленным вами расписанием (из базы данных).

1 голос
/ 03 марта 2010

А как насчет ночной работы с использованием служб SSIS с хранимой процедурой, которая проверяет, и если случается, что им 65 лет, она вводит новую строку в таблицу?

1 голос
/ 03 марта 2010

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

...