COMMIT TRAN & EXEC - печать значений хранимой процедуры в окне результатов - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть клиент Perl и база данных SQL Server для обработки операций с данными.Я написал хранимую процедуру на сервере, которая, в свою очередь, вызывает другую хранимую процедуру и использует атомарные операции, такие как COMMIT TRAN и ROLLBACK TRAN.

CREATE PROCEDURE MyStoredProc
    @SignatureID = NULL,      --//Always valid params are passed while executing
    @DebugIssueID INT = NULL,
AS
BEGIN
   SET NOCOUNT ON;

   CREATE TABLE #TempTable
   (
       --// 2 INT Columns
   )

   IF @BooleanCondition
   BEGIN
     BEGIN TRAN
     -- //many things before calling the other stored procedure below
     EXEC UpdateDebugIssueStoredProc
           @SignatureID = @SignatureID ,
           @DebugIssueID = @DebugIssueID 

     --//Some code that inserts many rows into #TempTable

     --//Finally committing the transaction
     IF @@ERROR = 0
        COMMIT TRAN
     ELSE
        ROLLBACK TRAN
   END

   SELECT * FROM #TempTable
END

. Я хочу, чтобы только набор результатов возвращался #TempTable.Однако, когда я выполняю MyStoredProc с одним набором параметров, результаты печати выглядят , как показано на этом скриншоте .После отладки и прохождения я обнаружил, что он печатает DebugIssueID, возвращаемый EXEC UpdateDebugIssueStoredProc.Поскольку UpdateDebugIssueStoredProc написан кем-то другим, я не могу это редактировать.

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

EXEC @DummyVariable = UpdateDebugIssueStoredProc
       @SignatureID = @SignatureID ,
       @DebugIssueID = DebugIssueID 

Аналогично, он печатает 1 (или ноль), возвращаемое COMMIT TRAN (как показано на скриншоте), за которым следует набор результатов в #TempTable.

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

DBD :: ODBC :: st выполнить не удалось: [Microsoft] [Драйвер ODBC SQL Server] Соединение занято с результатами для другого hstmt (SQL-HY000) Умер в строке MyScript.pl 256, DBD:: ODBC :: st fetchrow_array предупреждение: в данный момент нет оператора select, выполняющего

...