SQL Server - асинхронное выполнение запросов - PullRequest
7 голосов
/ 12 декабря 2011

В Sql Server 2008 у меня есть сохраненный процесс, который записывает результат в выходной параметр и вставляет параметры в таблицу.Я хочу, чтобы «вставка в таблицу» части SP выполнялась асинхронно, чтобы результат можно было прочитать из выходного параметра, не дожидаясь завершения команды вставки.

Как я могу это сделать?

Например.

CREATE PROCEDURE dbo.Sample_sp
    @RESULT INT OUTPUT
    @PARAM_1 INT,
    @PARAM_2 INT,
    @PARAM_N FLOAT
AS

-- Perform Calculations like @RES = @PARAM_1 + @PARAM_2......
INSERT INTO DBO.A VALUES(@PARAM_1, @PARAM_2, ..... @PARAM_N)

EXECUTE ASYNC dbo.Sample_sp

Ответы [ 2 ]

8 голосов
/ 12 декабря 2011

Возможно (см. Асинхронное выполнение процедуры ), но, скорее всего, результаты не будут такими, как вы хотите.В первую очередь асинхронность подразумевает нарушение контекста транзакции, принятого вызывающей процедурой (вставка происходит в другой транзакции).Кроме того, выполнение надежной асинхронной операции (как в моей связанной статье) подразумевает выполнение значительно большего количества операций записи, поэтому выигрыш в производительности отсутствует.

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

7 голосов
/ 12 декабря 2011

Вы не можете сделать это в стандартном SQL: это синхронно.Вы также не можете обработать выходные параметры, пока хранимая процедура не будет завершена.

Вам придется использовать сервисный брокер , чтобы отделить вычисления и INSERT (Правка: согласно ответу Ремуса)с примером)

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

Конечно, почему бы сначала не сделать расчет в клиенте?ака, какую проблему вы действительно пытаетесь решить ...

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