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

Откуда:
Сообщений: 222
Товарищи добрый день

я новичек, дали попробовать осуществить задание. То есть отрабатывает процедура(а), и после нее я обычно в ручном режиме запускаю другую за определенную дату(б), а сейчас нужно создать новую процедуру (new) сделать так, чтобы после того как отработала процедура (а)
автоматически начала работаь процедура (б) по определенным условиям.

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

/* CREATE PROCEDURE spNew
AS
BEGIN
Если понедельник, то запустить процедуру 'б' Где дата Понедельник - 2
Если вторник, то запустить процедуру 'б', где дата Вторник - 2, и где дата Вторник - 1
Если среда, четверг, пятница, суббота, то запустить процедуру 'б', где дата среда - 1, четверг - 1, пятница - 1, суббота - 1
в воскресение запускать процедуру 'б' нельзя.
END */
19 апр 19, 11:10    [21866919]     Ответить | Цитировать Сообщить модератору
 Re: автоматизация  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1507
dermama
---необходимо написать процедуру, которая автоматически запускала бы процесс после предыдущего

Если понедельник, то запустить процедуру 'б' Где дата Понедельник - 2
Если вторник, то запустить процедуру 'б', где дата Вторник - 2, и где дата Вторник - 1
Если среда, четверг, пятница, суббота, то запустить процедуру 'б', где дата среда - 1, четверг - 1, пятница - 1, суббота - 1

в воскресение запускать процедуру 'б' нельзя.
А если рабочие дни в результате переносов праздников попали на субботу и/или воскресенье? Не является ли описанная логика всего лишь вашим понимаем первого из процитированных предложений?
Может просто хранить дату предыдущего запуска и запускать процедуру при неравенстве хранимой даты и текущей с последующим сохранением текущей как даты предыдущей обработки? Никаких вычислений с датами и прочей ...стики.
19 апр 19, 11:38    [21866979]     Ответить | Цитировать Сообщить модератору
 Re: автоматизация  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
dermama,
как-то так, экспериментируйте
DECLARE @date DATE = GETDATE()
DECLARE @weekday INT = ( DATEPART( WEEKDAY, @date ) + @@DATEFIRST + 5 ) % 7 + 1
DECLARE @execdate DATE

IF @weekday = 1
BEGIN
  SET @execdate = DATEADD( DAY, -2, @date )
  EXECUTE dbo.procedure_A @date = @execdate
END
19 апр 19, 11:39    [21866980]     Ответить | Цитировать Сообщить модератору
 Re: автоматизация  [new]
dermama
Member

Откуда:
Сообщений: 222
Руслан Дамирович
dermama,
как-то так, экспериментируйте
 @@DATEFIRST + 5 ) % 7 + 1


Добрый день, поясните, пожалуйста, вот эту часть
19 апр 19, 12:06    [21867014]     Ответить | Цитировать Сообщить модератору
 Re: автоматизация  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
dermama
Руслан Дамирович
dermama,
как-то так, экспериментируйте
 @@DATEFIRST + 5 ) % 7 + 1



Добрый день, поясните, пожалуйста, вот эту часть
FAQ

Немного устарело, конечно. Есть и другие формулы. Тогда пришли в голову эти...
Дело в том, что функция, возвращающая день недели, зависит от того, какой день недели объявлен первым.
В России обычно считают, что это понедельник, в США - воскресенье и т.д.
Сервер хранит эту настройку в глобальной переменной @@DATEFIRST. Я очень давно для себя открыл,
что сумма этой переменной и числа, возвращаемого функцией DATEPART(WEEKDAY, ...), постоянна для каждого дня недели. Следовательно, используя эту сумму, можно забыть о специфических настройках сервера.
А дальше просто - можно подобрать эмпирически константы, чтобы общий результат получался правильным (см. FAQ)
19 апр 19, 12:54    [21867082]     Ответить | Цитировать Сообщить модератору
 Re: автоматизация  [new]
dermama
Member

Откуда:
Сообщений: 222
iap
dermama
пропущено...


Добрый день, поясните, пожалуйста, вот эту часть
FAQ

используя эту сумму, можно забыть о специфических настройках сервера.


Круто, спасибо, у меня на одном столе вторник как первый день, а на другом воскресение)
19 апр 19, 12:58    [21867088]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить