2010-03-03 1 views
0

У меня есть таблица tblClient, в которой хранится дата рождения клиента в поле типа datetime, DOB.Мониторинг вычисленных данных (возраст человека) в SQL Server

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

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

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

+0

периодически запланированное задание (например, хранимое proc), которое выполняет проверку и принимает соответствующие меры. –

+0

@mjv: комментарий Митча появился прямо перед тем, как я опубликовал сообщение. Позволь мне избавиться от него. – Sung

ответ

2

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

1

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

1

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

+2

Почему SSIS, когда вы можете использовать T-SQL из задания агента SQL? – SQLMenace

+0

@SQLMenace - есть ли разница в использовании службы планирования? – DVK

+0

, если вы используете SSIS, теперь вам также нужно развернуть пакет, и для всех, кого мы знаем, он даже не использует SSIS – SQLMenace

2

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

1

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

http://www.databasedesign-resource.com/sql-server-jobs.html

Установите ежедневное задание или что вы хотите назвать его.

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

1

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

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

+0

Запуск ежедневных звуков достаточно разумно, теперь я думаю об этом ... спасибо Пол, – Sung

1

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

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

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

+0

Не уверен, что вижу разницу между рассчитывая дату 65 лет назад с сегодняшнего дня один раз в день/ночь, а затем запрашивать любые DOB, равные этой дате, или ваши предложения: age65date = getdate()? Индексирование DOB все лучше. – JeffO

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^