Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите организовать событие  [new]
e-necro
Member

Откуда:
Сообщений: 3
Здравствуйте.
У меня проблема с событиями, не могу сообразить как сделать:

Например, есть человек, у него в таблице хранится пара значений: отдел, куда он устроен и отдел, где он работает сейчас.
Создается приказ, что этот человек, например, будет переведен из 1-го отдела в 3-й на срок с 10.03.2013 по 20.03.2013.
Приказ создан 06.03.2013.
Как сделать, что бы у этого человека отдел, где он работает в текущий момент, установился в 3 именно с 10-го числа, а потом сам вернулся обратно на 1 (с 20 числа)?

Подскажите кто чем сможет, буду благодарен
5 мар 13, 06:44    [14011685]     Ответить | Цитировать Сообщить модератору
 Re: помогите организовать событие  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
e-necro,

В общем случае создать задание ( Job). Если редакция сервера Express, то воспользоваться виндовым планировщиком + sqlcmd.
5 мар 13, 06:47    [14011686]     Ответить | Цитировать Сообщить модератору
 Re: помогите организовать событие  [new]
aleks2
Guest
Ken@t
e-necro,

В общем случае создать задание ( Job). Если редакция сервера Express, то воспользоваться виндовым планировщиком + sqlcmd.


1. В общем случае - фуфло несете.
2. Такие вещи делаются "периодическими реквизитами". Т.е. должна быть не просто запись: "имярек работает в отделе X", а таблица допускающая МНОЖЕСТВО записей "имярек работает в отделе X с даты 1", "имярек работает в отделе Y с даты 2", "имярек ваще не работает с даты 3"
5 мар 13, 07:33    [14011725]     Ответить | Цитировать Сообщить модератору
 Re: помогите организовать событие  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
aleks2,

Учу читать, дорого
автор
Как сделать, что бы у этого человека отдел, где он работает в текущий момент, установился в 3 именно с 10-го числа, а потом сам вернулся обратно на 1 (с 20 числа)?


На вопрос , как создать схему БД отвечающую требованиям..... ваш ответ верен.
5 мар 13, 07:43    [14011731]     Ответить | Цитировать Сообщить модератору
 Re: помогите организовать событие  [new]
aleks2
Guest
Ken@t
Учу читать, дорого

Бесполезное умение. Понимать надо.
5 мар 13, 11:41    [14013040]     Ответить | Цитировать Сообщить модератору
 Re: помогите организовать событие  [new]
e-necro
Member

Откуда:
Сообщений: 3
Спасибо за ответы, подумаю над событиями, мож до чего дойду...хотя нифига не понятно в них, если честно :)
Второй вариант, с изменением структуры, проще гораздо для меня, но не очень удобен к сожалению
5 мар 13, 13:10    [14013876]     Ответить | Цитировать Сообщить модератору
 Re: помогите организовать событие  [new]
Dima T
Member

Откуда:
Сообщений: 16050
На самом деле у тебя две задачи:
1. Внести изменения в базу (перевод в другой отдел)
2. Определить что время внесения изменений наступило и выполнить п.1.

Как понимаю основное непонимание с п.2
Тут просто надо настроить периодический запуск (например раз в сутки) кода который проверит какие на текущий момент надо выполнить изменения и выполнит п.1. Как запускать уже написали:
Ken@t
В общем случае создать задание ( Job). Если редакция сервера Express, то воспользоваться виндовым планировщиком + sqlcmd.

например можно сделать поле-флаг "Переведен" в приказе и проверять что надо сделать как-то так
select * from Приказы where ДатаПеревода <= GetDate() and Переведен = 0

и после выполнения перевода устанавливать Переведен = 1

Можно отдельную таблицу заданий завести, туда писать когда сделать и что сделать, и удалять задание после его выполнения.
5 мар 13, 13:36    [14014117]     Ответить | Цитировать Сообщить модератору
 Re: помогите организовать событие  [new]
Glory
Member

Откуда:
Сообщений: 104751
e-necro
Спасибо за ответы, подумаю над событиями, мож до чего дойду...хотя нифига не понятно в них, если честно :)

Что будет, если по каким-то причинам, например, техническим, ваше "событие" не сработает ?
5 мар 13, 13:52    [14014296]     Ответить | Цитировать Сообщить модератору
 Re: помогите организовать событие  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
e-necro,
внешние события делать это неправильный подход
надо ближе к жизни делать
а в жизни выпустили приказ с такой-то даты перевести такого-то чела в такой-то отдел
эта дата не факт что сегодня, вполне может быть через неделю, а может быть и вчера
ну дак в базу зарегистрировать этот приказ и всего делов
дальше в приложении кто-то интересуется "а в каком отделе чел работает?"
смотрим на таблицу приказов и ищем какой там последний вступил в силу - его и берем

событие тут может быть только одно - внесение записи в базу
а дальше пишем where getdate()>=date это если хотим узнать состояние на сейчас
5 мар 13, 18:51    [14016347]     Ответить | Цитировать Сообщить модератору
 Re: помогите организовать событие  [new]
П-Л
Guest
Неужели не пугает потеря информации при перезаписи "по событию" ? Неужели нет никаких других сущностей, завязанных на предыдущие, безжалостно уничтожаемые значения ? Честно говоря от такого подхода волосы дыбом на попе встают.
6 мар 13, 09:26    [14017733]     Ответить | Цитировать Сообщить модератору
 Re: помогите организовать событие  [new]
e-necro
Member

Откуда:
Сообщений: 3
извиняюсь, потерялся тут за всякой ежедневной ерундой.

П-Л,
нет, не пугает, поскольку по предполагаемой структуре БД, записи не будут удаляться, а просто закроются, ну т.е. установятся реквизиты дата открытия записи:10.03.2013, а дата закрытия:20.03.2013 (если смотреть мое первое сообщение), ну а после 20.03.2013 создатся еще одна запись в бд, которая будет действовать с 21.03.2013 до момента какого-нибудь изменения

leov,
в том-то и дело, что на приказы никто внимания обращать не должен - есть одна база сотрудников, из нее и берутся все основные реквизиты для всяких расчетов.

Glory,
у человека не будет подтверждения записи, что он где-то работал при других условиях - может потерять (или наоборот) в з\п

Но всем спасибо, я наконец понял что должно мое еще не сделанное событие конкретно делать :) Осталось технически до этого дойти
13 мар 13, 05:02    [14043201]     Ответить | Цитировать Сообщить модератору
 Re: помогите организовать событие  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16851
При условии хранения всей цепочки приказов о каждом новом назначении/переводе информация о том, где работает человек на любую заданную дату достается простым запросом (удобнее оформить табличной функцией с параметром даты, которая будет возвращать все текущие позиции всех сотрудников на эту дату). Никаких дополнительных джобов городить не нужно.
13 мар 13, 09:04    [14043400]     Ответить | Цитировать Сообщить модератору
 Re: помогите организовать событие  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Да пусть делает джобы. Наколется пару раз, сам поймет.
13 мар 13, 10:26    [14043743]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить