Возврат из хранимой процедуры до ее завершения - PullRequest
1 голос
/ 17 декабря 2009

У нас есть хранимая процедура, в которой есть две части. В части 1 ошибки должны быть возвращены приложению, и часть должна быть полностью выполнена до возврата хранимой процедуры.

Часть 2 - это длительный процесс, который должен выполняться при каждом вызове процедуры, но все сбои можно игнорировать (или обрабатывать в другом месте), однако мы хотим, чтобы приложение вернулось до его завершения. Итак, нам нужна процедура, которая делает это:

exec PART1
return
exec PART2 -- still gets executed, but after sql server has already responded that the SP was a success to the client.

Я думал, что мы могли бы потенциально сделать это как «рабочий поток», хотя я не знаю никакого синтаксиса, чтобы сделать это на сервере SQL.

Есть идеи? Я на правильном пути? Знаете ли вы синтаксис для достижения этой цели? Я пропускаю какой-то более простой способ сделать это?

Ответы [ 5 ]

2 голосов
/ 17 декабря 2009

То, на что вы могли бы обратить внимание, это Реализация заданий в SQL Server.

Идея состоит в том, чтобы иметь две хранимые процедуры, одна из которых вызывается вашей программой, а другая - заданием. Последним первым действием будет запуск (или планирование) задания. См. Также Рабочие места

1 голос
/ 17 декабря 2009

Никогда не слышал, чтобы это было возможно в SQL. Он хочет обработать партию через SP.

Копаясь, мы находим это :

При использовании собственного SQL Server Клиент OLE DB провайдер, приложения предназначен для инициализации источника данных объект асинхронно может установить DBPROPVAL_ASYNCH_INITIALIZE бит в DBPROP_INIT_ASYNCH собственность до звонить IDBInitialize::Initialize.

Звучит так, будто вы выбираете путь боли. Что если вы вызвали Stored Proc через .NET и, основываясь на условии, установленном в PART1, ваше приложение решит запустить PART2 или нет?

0 голосов
/ 17 декабря 2009

См. Асинхронное выполнение процедуры для примера, как это сделать без участия планировщика агента SQL. Агент SQL имеет ряд недостатков: масштабируемость, конкуренция, сценарии отработки отказа, согласованность резервного копирования и восстановления базы данных и, что немаловажно, недоступность в выпусках Express. Решение, приведенное в ссылке, преодолевает все эти проблемы за счет использования механизма Активация компонента Service Broker .

0 голосов
/ 17 декабря 2009

Есть три стандартных способа сделать то, что вы просите:

  1. Поставить задание в очередь на агента SQL
  2. Используйте активацию Service Broker для запуска другого SP (вероятно, ваш лучший выбор)
  3. Используйте обмен сообщениями компонента Service Broker для отправки сообщения в службу Windows, которая затем запускает нужный SP
0 голосов
/ 17 декабря 2009

Вы можете объединить хранимую процедуру для первой части и триггер для второй.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...