J'appelle une procédure stockée à partir du serveur BizTalk et j'essaie de la déboguer.
1) Utiliser le débogueur SQL lorsque la procédure stockée est appelée par un processus externe 2) Faire fonctionner sp_tracegenerateevent dans une procédure stockée
J'ai utilisé SQL Profiler comme seul outil pour savoir ce qui se passe. Mais maintenant, je doute que mes try/catches fonctionnent correctement ou non. Le code fonctionne bien lorsqu'il est exécuté dans le SSMS, mais lorsqu'il est exécuté à partir de BizTalk, il semble parfois que les try/catch sont toujours en train d'attraper.
ALTER PROCEDURE WhatItsName
@CatchErrors varchar(max) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT OFF;
DECLARE @debugMessage varchar(max) = ''
DECLARE @RowCreateBy VARCHAR (100)
SET @RowCreateBy = '108004'
BEGIN TRY
SET @RowCreateBy = '108005'
END TRY
BEGIN CATCH
SET @debugMessage = 'set @RowCreatedBy Failed - how can this be ??? '
END CATCH
etc...
Sur la base de ce que nous voyons dans le profiler ci-dessus, mon try/catch fonctionne-t-il comme prévu ou non ?
Maintenant, lorsque j'exécute le même processus stocké à partir de SSMS, les choses se déroulent normalement.
BizTalk exécute tout dans le cadre d'une transaction DTC. Remarquez que les instructions "BEGIN TRY" et "END TRY" apparaissent dans le deuxième profil sous SSMS (et que l'instruction "BEGIN CATCH" ne se déclenche PAS - comme prévu), alors qu'elles n'apparaissent pas dans le premier profil ci-dessus (où la sproc est exécutée à partir de BizTalk).
J'ai ensuite ajouté "BEGIN DISTRIBUTED TRANSACTION" à mon test script dans SSMS, et j'ai obtenu le même résultat que l'autre test SSMS ci-dessus.
REMARQUE : j'ai remarqué ce modèle dans le cadre d'un problème plus complexe, et j'ai voulu le simplifier afin de le publier ici.