Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Автоматическая смена статуса, через n дней  [new]
zvezda_t
Member

Откуда: Урал
Сообщений: 919
Здравствуйте, уважаемые программисты!

Подскажите мне пожалуйста, как правильно решать такую задачу:

Есть таблица docs (id, name_doc, date_doc, status)

Мне нужно сделать проверку, если status=1 и не менялся 14 дней, то изменить его на status=2.
То есть сделать отметку о том, что документ просроченный.
Где лучше написать процедуру или функцию и с помощью чего её можно запускать?
27 май 11, 08:07    [10716863]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
Может лучше вьюшку сделать или вычисляемое поле и там поле просроченный, а не менять статус документа?
Если менять статус документа, то процедура и джоб, джоб выполняется с нужной вам частотой
27 май 11, 08:10    [10716871]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
А еще как узнать, что статус не менялся 15- дней, date_doc насколько я понимаю дата документа, а где дата изменения статуса?
27 май 11, 08:12    [10716874]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
angel_zar
Может лучше вьюшку сделать и там поле просроченный, а не менять статус документа?
+100500
На голом процедурномыслии далеко не уедешь.

Хотя ситуации бывают разные, но стоит переосмыслить задачу и некоторые вещи сами собой пропадают.
27 май 11, 08:29    [10716915]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
zvezda_t
Member

Откуда: Урал
Сообщений: 919
angel_zar
А еще как узнать, что статус не менялся 15- дней, date_doc насколько я понимаю дата документа, а где дата изменения статуса?

date_doc - дата изменения статуса.

angel_zar, мне нужно именно изменить статус, к сожалению переосмыслить тут нельзя.

А что такое джоб? Где его запрограммировать?
27 май 11, 09:10    [10717059]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Нужно дополнительное поле или таблица
27 май 11, 09:18    [10717103]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
zvezda_t
Member

Откуда: Урал
Сообщений: 919
Anatoly Podgoretsky
Нужно дополнительное поле или таблица

Расскажите подробнее пожалуйста.
Поле date_doc - хранит последнию дату изменения статуса
27 май 11, 09:20    [10717116]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Странное конечно имя, но в данном случае поле для проверки есть, если это (date_doc - Date >= 14 and status=1) то это оно
27 май 11, 09:26    [10717147]     Ответить | Цитировать Сообщить модератору
 Re: Автоматическая смена статуса, через n дней  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Anatoly Podgoretsky
Странное конечно имя, но в данном случае поле для проверки есть, если это (date_doc - Date >= 14 and status=1) то это оно
Не совсем корректно.
  • Date - это GETDATE() или CURRENT_TIMESTAMP, то в нём содержится время.
    Время также, небось и в date_doc отлично от нулевого.
    Как я понял, речь идёт о полных сутках.
  • Ваше условие полностью исключает использование индексов по date_doc
    Наверно, так:
    date_doc>=DATEADD(DAY, DATEDIFF(DAY,0, CURRENT_TIMESTAMP)-14,0)
  • 27 май 11, 09:35    [10717187]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    zvezda_t
    Member

    Откуда: Урал
    Сообщений: 919
    Anatoly Podgoretsky
    Странное конечно имя, но в данном случае поле для проверки есть, если это (date_doc - Date >= 14 and status=1) то это оно

    Как написать запрос я понимаю.

    Где лучше написать процедуру или функцию с запросом и с помощью чего её можно запускать?
    27 май 11, 09:41    [10717212]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    iap
    Member

    Откуда: Москва
    Сообщений: 47142
    zvezda_t
    Anatoly Podgoretsky
    Странное конечно имя, но в данном случае поле для проверки есть, если это (date_doc - Date >= 14 and status=1) то это оно

    Как написать запрос я понимаю.

    Где лучше написать процедуру или функцию с запросом и с помощью чего её можно запускать?
    Замените постоянное поле status на вычисяемое поле status
    (вот в этом определении и надо написать, как его считать). Никто и не заметит!
    Зато оно всегда будет иметь правильное значение без триггеров, джобов и пр.
    27 май 11, 10:00    [10717353]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    iljy
    Member

    Откуда:
    Сообщений: 8711
    iap,

    не будет. Насколько я понял, поле status может изменяться и пользователем, т.е. может стать 2 до истечения 14 дней.
    27 май 11, 10:02    [10717375]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    jsmirnoww
    Member

    Откуда: Москва
    Сообщений: 132
    Quick start for Jobs:
    1. В SSMS раскрываешь узел [SQL Сервер]->SQL Server Agent-> Jobs.
    2. Тыкаешь в Jobs правой кнопкой мыши, выбираешь New Job
    3. На странице General задаёшь имя JOB'а
    4. На странице Steps создаёшь новый шаг и в нём пишешь скрипт/запрос, который будет выполнять твоё преобразование статусов
    5. На закладке Schedules задаёшь расписание для периодического выполнения твоего job'а
    6. Идёшь пить пиво.

    PS: если обработка будет разрастаться, то удобнее сделать для нее процедуру и запускать её в job'е. так отлаживать и сопровождать в дальнейшем проще будет
    ------------------------------------------------------------
    Скидки 50-90% на боулинг, бильярд, кафе, массаж, мойку машин ...
    27 май 11, 10:21    [10717519]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6724
    iljy
    iap,

    не будет. Насколько я понял, поле status может изменяться и пользователем, т.е. может стать 2 до истечения 14 дней.
    Поле нужно не заменять, а добавить, и дописать CASE. Но лучше копнуть дальше:
    Если status = 2 ставится вместе с проставлением поля Paid(к примеру): NULL -> NOT NULL (Money/Date), то тогда можно и заменить прописав соответственно CASE.

    Поле status может говорить, что возможно что-то недо-проектированно или пере-проектированно.
    27 май 11, 10:25    [10717543]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6724
    jsmirnoww
    ... в job'е. так отлаживать и сопровождать в дальнейшем проще будет
    Вы правильно написали: с job-ами в дальнейшем будет постоянное обязательное отлаживание и сопровождение.
    Отлично, в мире итак 7 лярдов бесхвостых обезьян, и заняться то нечем.
    27 май 11, 10:32    [10717598]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    zvezda_t
    Member

    Откуда: Урал
    Сообщений: 919
    iap
    Замените постоянное поле status на вычисяемое поле status
    (вот в этом определении и надо написать, как его считать). Никто и не заметит!
    Зато оно всегда будет иметь правильное значение без триггеров, джобов и пр.


    iap, я так и думала что есть какое-то красивое и простое решение!
    Спасибо Вам большое, что научили!

    А если пользователь, сам захочет статус сменить, вычисляемое поле позволит?
    27 май 11, 12:15    [10718572]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6724
    zvezda_t
    Спасибо Вам большое, что научили!

    А если пользователь, сам захочет статус сменить, вычисляемое поле позволит?
    Противоречие однако.
    Научили это когда знаешь, а ваш вопрос говорит что нифига не знаешь.

    И самое главное вы не поняли и пропустили мимо мозгов оставили без внимания несколько постов. Особенно ответ на ваш вопрос: 10717375

    Вообще-то это признак, всё хамба, на всю жизнь. Вон из профессии.
    27 май 11, 16:11    [10721079]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    zvezda_t
    Member

    Откуда: Урал
    Сообщений: 919
    Mnior
    Вообще-то это признак, всё хамба, на всю жизнь. Вон из профессии.

    Зачем же Вы помогаете, и тут же обижаете?
    очень обидно такое слышать

    Mnior
    Поле нужно не заменять, а добавить, и дописать CASE. Но лучше копнуть дальше:
    Если status = 2 ставится вместе с проставлением поля Paid(к примеру): NULL -> NOT NULL (Money/Date), то тогда можно и заменить прописав соответственно CASE.

    Поле status может говорить, что возможно что-то недо-проектированно или пере-проектированно.

    Я не пропустила, Ваше сообщение. Я просто не поняла, как это сделать ((( Для меня сложно.
    30 май 11, 09:14    [10729315]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    zvezda_t
    Member

    Откуда: Урал
    Сообщений: 919
    Mnior, если Вы объясните подробнее, буду Вам очень благодарна.
    30 май 11, 09:27    [10729346]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    SomewhereSomehow
    Member

    Откуда: Moscow
    Сообщений: 2480
    Блог
    zvezda_t,

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

    Я бы вообще сделал дополнительное вычисляемое поле, в котором можно прописать зависимость и от поля статус и от даты. Или вообще никакого поля не делать, а вычислять это непосредственно в запросе.
    30 май 11, 09:42    [10729419]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    zvezda_t
    Member

    Откуда: Урал
    Сообщений: 919
    SomewhereSomehow
    zvezda_t,

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

    Я бы вообще сделал дополнительное вычисляемое поле, в котором можно прописать зависимость и от поля статус и от даты. Или вообще никакого поля не делать, а вычислять это непосредственно в запросе.


    Сижу думаю над Вашими словами, никак так не получается...
    Мне тогда очень много запросов придется переписывать... Это поле статус в отчетности используется, на него много операций ссылается.
    И зачем мне тогда еще одно вычисляемое поле? Я не могу понять.
    30 май 11, 09:58    [10729494]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    iap
    Member

    Откуда: Москва
    Сообщений: 47142
    zvezda_t
    И зачем мне тогда еще одно вычисляемое поле? Я не могу понять.
    Чтобы постоянное поле мог задавать пользователь.
    А вычисляемое поле использовало его, добавляя зависимость от даты.
    30 май 11, 10:00    [10729504]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    SomewhereSomehow
    Member

    Откуда: Moscow
    Сообщений: 2480
    Блог
    zvezda_t,

    ну вы можете статус сделать вычисляемым (чтобы не менять все запросы на выборку), а поле в которое пишет пользователь (тут уже конечно придется поменять запрос(ы) на модификацию) - поменять на служебное и на основе его уже делать вычисления. Идея такая, как высказал iap.
    30 май 11, 10:24    [10729656]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6724
    zvezda_t
    Я не пропустила, Ваше сообщение.
    А я ссылался не на своё.
    zvezda_t
    Я не пропустила, Я просто не поняла, как это сделать.
    Мда. Противоречие за противоречием.

    zvezda_t
    Mnior
    Если status = 2 ставится вместе с проставлением поля Paid(к примеру): NULL -> NOT NULL (Money/Date)
    Я просто не поняла, как это сделать
    Причём тут сделать.

    Когда вы ставите status = 2, вы заодно другие поля изменяете???

    PS: На меня не обижаются.
    Из песни: Жизнь не для тех кто любит сны
    30 май 11, 11:17    [10730121]     Ответить | Цитировать Сообщить модератору
     Re: Автоматическая смена статуса, через n дней  [new]
    zvezda_t
    Member

    Откуда: Урал
    Сообщений: 919
    iap ,SomewhereSomehow
    благодарю Вас за разъяснения, буду думать, как мне оптимальнее сделать.

    Mnior
    Когда вы ставите status = 2, вы заодно другие поля изменяете???


    да, заодно устанавливается дата изменения этого статуса.
    30 май 11, 12:11    [10730674]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить