Je rencontre actuellement des problèmes pour appeler une procédure stockée async à partir d'un déclencheur de mise à jour d'insert. Pour cela, j'utilise le service broker.Procédure stockée SQL Server 2005 Asnyc
--message type
CREATE MESSAGE TYPE [TheMessage] VALIDATION = NONE
--contract
CREATE CONTRACT [TheContract] ([TheMessage] SENT BY ANY);
--queue
CREATE QUEUE [TheQueue] WITH ACTIVATION
(STATUS = ON, MAX_QUEUE_READERS = 1,
PROCEDURE_NAME = TheStoreProcedure,
EXECUTE AS OWNER);
--service
CREATE SERVICE [TheService] ON QUEUE [TheQueue] ([TheContract]);
Dans le trigger:
DECLARE @Handle UNIQUEIDENTIFIER;
BEGIN DIALOG CONVERSATION @Handle
FROM SERVICE [TheService]
TO SERVICE 'TheService'
ON CONTRACT [TheContract]
WITH ENCRYPTION = OFF;
SEND ON CONVERSATION @Handle
MESSAGE TYPE [TheMessage](N'some data');
Dans la procédure stockée:
DECLARE @Handle UNIQUEIDENTIFIER;
DECLARE @MessageType SYSNAME;
RECEIVE TOP (1)
@Handle = conversation_handle,
@MessageType = message_type_name
FROM [TheQueue];
IF(@Handle IS NOT NULL)
BEGIN
-- some statements
END
Cette configuration ne semble pas fonctionner. Le déclencheur ne renvoie aucune erreur, donc je suppose que le message est en file d'attente. Mais la réception dans le stocké ne semble pas fonctionner. Aucune de mes déclarations n'est en cours d'exécution.