Фоновая обработка T-SQL

У меня проблемы с поиском формулировки, но возможно ли предоставить SQL-запрос серверу MS SQL и получить результаты асинхронно?

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

Или есть какой-то общий модификатор, который я могу добавить к запросу, чтобы заставить его обработать результаты в фоновом режиме (например, "&" в bash).

Больше информации

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

12.12.2008 00:14:09
5 ОТВЕТОВ
РЕШЕНИЕ

Это действительно зависит от того, как вы общаетесь с БД. С ADO.NET вы можете сделать выполнение команды асинхронным. Если вы хотели сделать это за пределами какой-либо библиотеки, созданной для этого, вы можете вставить запись в таблицу заданий, а затем сделать так, чтобы SQL Agent опрашивал таблицу, а затем запускать вашу работу как хранимую процедуру или что-то в этом роде.

По всей вероятности, я думаю, что ваш веб-запрос получен asp.net, и вы можете использовать классы ADO.NET.

0
12.12.2008 00:20:40

Смотрите этот вопрос. Запуск хранимых процедур последовательно или параллельно.

По сути, у вас будет веб-страница, чтобы начать работу. Задание будет выполняться асинхронно.

0
23.05.2017 12:30:42

Это сложная тема, чтобы иметь возможность выполнить хранимую процедуру и затем асинхронно получить результат. На самом деле это не для слабонервных, и моя первая рекомендация - пересмотреть ваш дизайн и быть уверенным, что вам действительно нужно асинхронно обрабатывать ваш запрос на уровне данных.

В зависимости от того, что именно вы делаете, вам следует рассмотреть две технологии ... SQL Service Broker, который в основном позволяет ставить запросы в очередь и получать ответы асинхронно. Он был введен в SQL 2005 и звучит так, как будто он является лучшим выбором из того, как вы сформулировали свой вопрос.

Посмотрите учебное пособие для бесед с тем же брокером службы баз данных на MSDN: http://msdn.microsoft.com/en-us/library/bb839495(SQL.90).aspx

Для более длительных или больших задач обработки я бы потенциально посмотрел на что-то вроде Biztalk или Windows Workflow. Эти платформы (они в основном одинаковые, они принадлежали одной и той же команде в MS) позволяют запускать асинхронный рабочий процесс, который может не возвращаться в течение нескольких часов, дней, недель или даже месяцев.

-1
12.12.2008 00:55:15

Поскольку http не имеет соединения, единственный способ связать поиск с запросом - это сеансы. Тогда у вас будут все эти ответы, ожидающие, пока кто-нибудь их не затребует, и вы не сможете узнать, была ли нарушена связь (которая не существует).

На веб-странице, это в значительной степени использовать или потерять.

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

0
12.12.2008 01:18:15

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

1
12.12.2008 01:52:36