У меня есть клиент 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, выполняющего