Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запуск консольной программы при добавлении записи в таблицу / 17 сообщений из 17, страница 1 из 1
05.05.2017, 10:02
    #39449190
D_A_S1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
Добрый день!
У нас стоит Microsoft Sql Server. Есть таблица, в которую добавляется запись для формирования счета. Сам счет в pdf формирует консольное приложение. На данный момент приложение запускается раз в минуту, что не очень хорошо.
Хочется, чтобы приложение запускалось, когда добавлялось новая запись в таблицу.
В Google посмотрел, что есть. Вижу два варианта - триггер или Sql Агент. Триггер, я так понимаю, не очень подходит.
Кто-нибудь делал что-нибудь похожее через Sql агент? Может есть пример или что-то подобное. Заранее спасибо!
...
Рейтинг: 0 / 0
05.05.2017, 11:04
    #39449243
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
Совсем правильно будет задействовать компонент Service Broker.

На таблицу вешаешь триггер, который отсылает сообщение сервис брокеру.
А в обработчике сообщений уже вызываешь соответствующее приложение.
...
Рейтинг: 0 / 0
05.05.2017, 11:27
    #39449262
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
D_A_S1Добрый день!
У нас стоит Microsoft Sql Server. Есть таблица, в которую добавляется запись для формирования счета. Сам счет в pdf формирует консольное приложение. На данный момент приложение запускается раз в минуту, что не очень хорошо.
Хочется, чтобы приложение запускалось, когда добавлялось новая запись в таблицу.
В Google посмотрел, что есть. Вижу два варианта - триггер или Sql Агент. Триггер, я так понимаю, не очень подходит.
Кто-нибудь делал что-нибудь похожее через Sql агент? Может есть пример или что-то подобное. Заранее спасибо!

Как написали уже
1. Service Broker
2. Прикрутить в приложение SqlChangeMonitor (SqlDependency) и активироваться, если в некой таблице произошли изменения
3. SQLCLR процедура, которая вызывается в триггере и отправляет сообщение приложению, как клиент сервису (WCF, RestFul, sockets...), оно активируется и что-то там делает
...
Рейтинг: 0 / 0
05.05.2017, 12:01
    #39449287
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
D_A_S1,

у вас, извиняюсь, штаны через голову надеваются. Инициировать вызов формирования PDF должен не сервер, а то приложение, которое добавляет запись в базу.
...
Рейтинг: 0 / 0
05.05.2017, 12:23
    #39449310
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
Владислав КолосовИнициировать вызов формирования PDF должен не сервер, а то приложение, которое добавляет запись в базу.Вот интересно, если "добавить запись в базу" случается в серверном коде и является следствием некого действия в приложении, которое вообще не в курсе, что такое счета и формирование PDF, что в этом случае будет надеванием штанов через голову?
...
Рейтинг: 0 / 0
05.05.2017, 12:37
    #39449318
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
invm, моя точка зрения состоит в том, что если MS дает возможность серверу баз данных выполнять внешние приложения, то это не значит, что именно так и надо поступать и превращать СУБД в сервер приложений.

Да, есть безвыходные ситуации, например, при использовании коробочного ПО. Но закладывать в архитектуру своего приложения такое поведение неверно. Сервер должен обслуживать базы данных и не более того. Он не должен управлять производственными процессами.

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

Если речь идет о формировании отчетности, то можно использовать решение на базе Reporting Services, который имеет возможность строить отчеты и сохранять в том же PDF по мере поступления данных.
...
Рейтинг: 0 / 0
05.05.2017, 12:40
    #39449320
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
Владислав Колосовinvm, моя точка зрения состоит в том, что если MS дает возможность серверу баз данных выполнять внешние приложения, то это не значит, что именно так и надо поступать и превращать СУБД в сервер приложений.

Да, есть безвыходные ситуации, например, при использовании коробочного ПО. Но закладывать в архитектуру своего приложения такое поведение неверно. Сервер должен обслуживать базы данных и не более того. Он не должен управлять производственными процессами.

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

Если речь идет о формировании отчетности, то можно использовать решение на базе Reporting Services, который имеет возможность строить отчеты и сохранять в том же PDF по мере поступления данных.

Это идеальный случай, но жизнь вносит свои коррективы, и вполне возможно сделать некую обратную связь, ни к чему не обязывающую сервер, fire&forget
...
Рейтинг: 0 / 0
05.05.2017, 12:51
    #39449334
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
Владислав КолосовСервер должен обслуживать базы данных и не более тогоСервер должен обеспечивать работу бизнеса наиболее эффективно и наименее затратно.
Если при этом потребуется нарушить дурацкие догматы типа "ничего кроме select, insert, update и delete", то так и нужно делать.
...
Рейтинг: 0 / 0
05.05.2017, 17:31
    #39449580
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
invm,

догматы не дурацкие, они сводят затраты на сопровождение, развертывание и миграцию к минимуму. Я уже прошел стадию "вседозволенности" и мне знакомы Ваши утверждения, потому что я их сам практиковал :)
...
Рейтинг: 0 / 0
05.05.2017, 18:08
    #39449604
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
Владислав Колосовinvm,

догматы не дурацкие, они сводят затраты на сопровождение, развертывание и миграцию к минимуму. Я уже прошел стадию "вседозволенности" и мне знакомы Ваши утверждения, потому что я их сам практиковал :)

Service Broker - вырезать?
...
Рейтинг: 0 / 0
05.05.2017, 19:00
    #39449618
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
Владислав Колосовдогматы не дурацкиеДогматы потому и дурацкие, что они догматы.
Владислав Колосовони сводят затраты на сопровождение, развертывание и миграцию к минимуму.Ок. Предположим есть необходимость в ответ на некое событие в БД запускать внешнее приложение. Ваши действия?
...
Рейтинг: 0 / 0
05.05.2017, 20:09
    #39449634
Massa52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
invm,

Вряд ли событие само рождается на сервере. С вероятностью в 99% оно инициируется внешним приложением.
Вот снаружи и надо все стараться обустраивать. А иначе - это действительно штаны не оттуда одевать.
...
Рейтинг: 0 / 0
05.05.2017, 20:56
    #39449641
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
Massa52С вероятностью в 99% оно инициируется внешним приложением.Т.е. внешнее приложение должно быть осведомлено о событиях, которые могут случиться при каких-то манипуляциях с БД? Про принцип "черного ящика" что-нибудь слышали?
Massa52Вот снаружи и надо все стараться обустраивать.Ох уж мне эти архитекторы...
Где обустраивать-то собрались? И кто вам сказал, что "наружа" вообще должна знать, что нужно что-то и когда-то запускать при определенных условиях?
...
Рейтинг: 0 / 0
05.05.2017, 21:16
    #39449645
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
Владислав Колосовinvm,

догматы не дурацкие, они сводят затраты на сопровождение, развертывание и миграцию к минимуму. Я уже прошел стадию "вседозволенности" и мне знакомы Ваши утверждения, потому что я их сам практиковал :)

Тогда надо исключить DbMail из состава сервера.
...
Рейтинг: 0 / 0
06.05.2017, 13:24
    #39449746
Massa52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
Lepsik,

Если представить базу данных как хранилище - скажем склад товаров(ИКЕА), то DbMail выглядит как почтовое/транспортое отделение при хранилище. И он не работает с товарами. Это кладовшик/покупатель выкатывает товары на тележке и, там в(DbMail) оформляет доставку.
Это просто дополнительный сервис и не в тему с топиком.
Ну а если продолжить аналогию и обратиться к проблеме TC, то получается, что поставщик прикатил на склад товар и умыл руки. И тут должен кладовщик принявший товар сообразить и вовремя подать сигнал покупателю(а это дополнительная служба) - мол твой товар прибыл. Такая служба тоже востребованный сервис(в данном случае никто не утверждает - что он не нужен). Но в большинстве случаев - тот кто прикатывает конкретный товар в курсе кому он предназначен и может сообщить поставщику - что товар доставлен - не задействую при этом складские службы.
...
Рейтинг: 0 / 0
24.04.2018, 11:18
    #39635207
yaxinr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
используйте https://github.com/event-driven-arch/mssql2amqp
в качестве amqp брокера используйте http://www.rabbitmq.com/getstarted.html
протокол реализован на самых популярных языках программирования
...
Рейтинг: 0 / 0
24.04.2018, 13:38
    #39635363
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск консольной программы при добавлении записи в таблицу
yaxinrв качестве amqp брокера используйте http://www.rabbitmq.com/getstarted.html
Он сможет запустить "format c:"?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запуск консольной программы при добавлении записи в таблицу / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]