Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
e-necro Member Откуда: Сообщений: 3 |
Здравствуйте. У меня проблема с событиями, не могу сообразить как сделать: Например, есть человек, у него в таблице хранится пара значений: отдел, куда он устроен и отдел, где он работает сейчас. Создается приказ, что этот человек, например, будет переведен из 1-го отдела в 3-й на срок с 10.03.2013 по 20.03.2013. Приказ создан 06.03.2013. Как сделать, что бы у этого человека отдел, где он работает в текущий момент, установился в 3 именно с 10-го числа, а потом сам вернулся обратно на 1 (с 20 числа)? Подскажите кто чем сможет, буду благодарен |
5 мар 13, 06:44 [14011685] Ответить | Цитировать Сообщить модератору |
Ken@t Member Откуда: 大地 Сообщений: 3264 |
e-necro, В общем случае создать задание ( Job). Если редакция сервера Express, то воспользоваться виндовым планировщиком + sqlcmd. |
5 мар 13, 06:47 [14011686] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
1. В общем случае - фуфло несете. 2. Такие вещи делаются "периодическими реквизитами". Т.е. должна быть не просто запись: "имярек работает в отделе X", а таблица допускающая МНОЖЕСТВО записей "имярек работает в отделе X с даты 1", "имярек работает в отделе Y с даты 2", "имярек ваще не работает с даты 3" |
||
5 мар 13, 07:33 [14011725] Ответить | Цитировать Сообщить модератору |
Ken@t Member Откуда: 大地 Сообщений: 3264 |
aleks2, Учу читать, дорого
На вопрос , как создать схему БД отвечающую требованиям..... ваш ответ верен. |
||
5 мар 13, 07:43 [14011731] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Бесполезное умение. Понимать надо. |
||
5 мар 13, 11:41 [14013040] Ответить | Цитировать Сообщить модератору |
e-necro Member Откуда: Сообщений: 3 |
Спасибо за ответы, подумаю над событиями, мож до чего дойду...хотя нифига не понятно в них, если честно :) Второй вариант, с изменением структуры, проще гораздо для меня, но не очень удобен к сожалению |
5 мар 13, 13:10 [14013876] Ответить | Цитировать Сообщить модератору |
Dima T Member Откуда: Сообщений: 15593 |
На самом деле у тебя две задачи: 1. Внести изменения в базу (перевод в другой отдел) 2. Определить что время внесения изменений наступило и выполнить п.1. Как понимаю основное непонимание с п.2 Тут просто надо настроить периодический запуск (например раз в сутки) кода который проверит какие на текущий момент надо выполнить изменения и выполнит п.1. Как запускать уже написали:
например можно сделать поле-флаг "Переведен" в приказе и проверять что надо сделать как-то так select * from Приказы where ДатаПеревода <= GetDate() and Переведен = 0 и после выполнения перевода устанавливать Переведен = 1 Можно отдельную таблицу заданий завести, туда писать когда сделать и что сделать, и удалять задание после его выполнения. |
||
5 мар 13, 13:36 [14014117] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Что будет, если по каким-то причинам, например, техническим, ваше "событие" не сработает ? |
||
5 мар 13, 13:52 [14014296] Ответить | Цитировать Сообщить модератору |
leov Member Откуда: С-Петербург Сообщений: 616 |
e-necro, внешние события делать это неправильный подход надо ближе к жизни делать а в жизни выпустили приказ с такой-то даты перевести такого-то чела в такой-то отдел эта дата не факт что сегодня, вполне может быть через неделю, а может быть и вчера ну дак в базу зарегистрировать этот приказ и всего делов дальше в приложении кто-то интересуется "а в каком отделе чел работает?" смотрим на таблицу приказов и ищем какой там последний вступил в силу - его и берем событие тут может быть только одно - внесение записи в базу а дальше пишем where getdate()>=date это если хотим узнать состояние на сейчас |
5 мар 13, 18:51 [14016347] Ответить | Цитировать Сообщить модератору |
П-Л
Guest |
Неужели не пугает потеря информации при перезаписи "по событию" ? Неужели нет никаких других сущностей, завязанных на предыдущие, безжалостно уничтожаемые значения ? Честно говоря от такого подхода волосы дыбом на попе встают. |
6 мар 13, 09:26 [14017733] Ответить | Цитировать Сообщить модератору |
e-necro Member Откуда: Сообщений: 3 |
извиняюсь, потерялся тут за всякой ежедневной ерундой. П-Л, нет, не пугает, поскольку по предполагаемой структуре БД, записи не будут удаляться, а просто закроются, ну т.е. установятся реквизиты дата открытия записи:10.03.2013, а дата закрытия:20.03.2013 (если смотреть мое первое сообщение), ну а после 20.03.2013 создатся еще одна запись в бд, которая будет действовать с 21.03.2013 до момента какого-нибудь изменения leov, в том-то и дело, что на приказы никто внимания обращать не должен - есть одна база сотрудников, из нее и берутся все основные реквизиты для всяких расчетов. Glory, у человека не будет подтверждения записи, что он где-то работал при других условиях - может потерять (или наоборот) в з\п Но всем спасибо, я наконец понял что должно мое еще не сделанное событие конкретно делать :) Осталось технически до этого дойти |
13 мар 13, 05:02 [14043201] Ответить | Цитировать Сообщить модератору |
Программист-Любитель Member Откуда: Сообщений: 16839 |
При условии хранения всей цепочки приказов о каждом новом назначении/переводе информация о том, где работает человек на любую заданную дату достается простым запросом (удобнее оформить табличной функцией с параметром даты, которая будет возвращать все текущие позиции всех сотрудников на эту дату). Никаких дополнительных джобов городить не нужно. |
13 мар 13, 09:04 [14043400] Ответить | Цитировать Сообщить модератору |
ambarka_max Member Откуда: Россия Сообщений: 517 |
Да пусть делает джобы. Наколется пару раз, сам поймет. |
13 мар 13, 10:26 [14043743] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |