В моем приложении мне нужно асинхронно вызывать хранимый процесс.
Для этого я использую Sql Service Broker.
Это этапы, используемые при создании асинхронного вызова.
1) Я создал Сообщение, Контракт, Очередь, Сервис.
И отправка сообщений. Я вижу свои сообщения в «ReceiveQueue1».
2) Я создал сохраненный Proc и очередь
Когда я выполняю Stored Proc (proc_AddRecord), он выполняется только один раз.
Это чтение всех записей в очередях и добавление этих записей в таблицу.
До этого момента он работал нормально.
Но когда я добавляю несколько новых сообщений в ReceiveQueue1, мой сохраненный процесс не добавляет эти
автоматически записывает в таблицу. Я должен повторно выполнить сохраненный процесс (proc_AddRecord)
Чтобы добавить новые сообщения. Почему сохраненный процесс не выполняется.
Что я должен сделать для того, чтобы асинхронно вызывать хранимый процесс.
Весь смысл использования Service Broker заключается в асинхронном вызове хранимых процедур.
Я совершенно новичок в SQL Server Service Broker.
Ценю любую помощь.
Вот мой код для хранимого Proc
#
--exec proc_AddRecord
ALTER PROCEDURE proc_AddRecord
AS
Declare
@Conversation UniqueIdentifier,
@msgTypeName nvarchar(200),
@msg varbinary(max)
While (1=1)
Begin
Begin Transaction;
WAITFOR
(
Receive Top (1)
@Conversation = conversation_handle,
@msgTypeName = message_type_name,
@msg = message_body
from dbo.ReceiveQueue1
), TIMEOUT 5000
IF @@Rowcount = 0
Begin
Rollback Transaction
Break
End
PRINT @msg
If @msg = 'Sales'
BEGIN
insert into TableCity(deptNo,Manager,Group,EmpCount) VALUES(101,'Reeves',51, 29)
COMMIT Transaction
Continue
End
If @msg = 'HR'
BEGIN
insert into TableCity(deptNo,Manager,Group,EmpCount) VALUES(102,'Cussac',55, 14)
COMMIT Transaction
Continue
End
Begin
Print 'Process end of dialog messages here.'
End Conversation @Conversation
Commit Transaction
Continue
End
Rollback Transaction
END
ALTER QUEUE AddRecorQueue
WITH ACTIVATION (
PROCEDURE_NAME=proc_AddRecord,
MAX_QUEUE_READERS = 1,
STATUS = ON,
EXECUTE AS 'dbo');