Transaktionsanzahl nach EXECUTE zeigt eine nicht übereinstimmende Anzahl von BEGIN- und COMMIT-Anweisungen an. Vorherige Zählung

7

Ich bekomme diese Ausnahme von Commits und Rollbacks, bin mir aber nicht sicher, was genau an meiner Stored Procedure falsch ist. Ich habe die Antworten in anderen solchen Fragen gelesen und bin nicht in der Lage zu finden, wo genau die Anzahl der Commits durcheinander gebracht wird.

Also, das ist die Stored Procedure, die ich verwende:

%Vor%

jetzt rufe ich diese Prozedur im folgenden Code auf:

%Vor%

Und ich bekomme eine Ausnahme in der Zeile, die int rowcount = cs.getInt(2);

sagt

Die Ausnahme ist:

%Vor%

Bitte hilf mir.         unter com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.getValue (SQLServerCallableStatement.java:393)         unter com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.getInt (SQLServerCallableStatement.java:437)         bei mainsoft.tools.purge.PurgeUtils.PurgeLeads (PurgeUtils.java:283)

BEARBEITEN:

Da ich diese Frage selbst beantwortet habe ... möchte ich die Frage jetzt ein wenig ändern.

Warum wurde in der execute-Methode keine Ausnahme ausgelöst?

    
MozenRath 25.01.2012, 11:51
quelle

5 Antworten

2

Sorry Leute! Danke für all Ihre Bemühungen. Am Ende war es ein sehr kleiner Fehler in meinem Stored Procedure:

Siehe Zeile:

%Vor%

Es sollte #PURGE_LEAD_E

sein

All Ihre Antworten haben mir geholfen, eine andere Perspektive der Entwicklung von Geschäftsprozeduren zu bekommen. Vielen Dank!

    
MozenRath 25.01.2012, 16:57
quelle
14

Ihr COMMIT wird wahrscheinlich wegen eines Fehlers nicht getroffen. Die Transaktion wird nicht automatisch zurückgesetzt.

Der beste Weg (und die beste Vorgehensweise) besteht darin, eine SQL-Fehlerbehandlung hinzuzufügen

%Vor%

Weitere Details zu dem, was hier vor sich geht, finden Sie in meiner Antwort hier Verschachtelte gespeicherte Prozeduren, die das TRY CATCH ROLLBACK-Muster enthalten?

Hinweis: Sie müssen die temporären Tabellen nicht löschen, da sie den Gültigkeitsbereich verlassen, wenn die gespeicherte Prozedur

beendet wird     
gbn 25.01.2012 11:59
quelle
7

Fügen Sie am Anfang der Prozedur

hinzu %Vor%

Oder

Umbrechen Sie Ihre Anweisungen mit

%Vor%

Um zu prüfen, wie viele nicht committed BEGIN TRAN geöffnet ist, testen Sie die Systemvariable @@TRANCOUNT

    
Oleg Dok 25.01.2012 11:59
quelle
3

Dies geschieht normalerweise, wenn die Transaktion gestartet wird und entweder nicht festgeschrieben ist oder nicht zurückgesetzt wird.

Falls der Fehler in Ihrer gespeicherten Prozedur auftritt, kann dies die Datenbanktabellen sperren, da die Transaktion aufgrund einiger Laufzeitfehler in Abwesenheit der Ausnahmebehandlung nicht abgeschlossen wurde         Sie können die Ausnahmebehandlung wie unten beschrieben verwenden. SET XACT_ABORT

%Vor%     
Pankaj 26.01.2012 12:28
quelle
1

Wie genau enthält die Variable @leadscount die Anzahl der gelöschten Leads?

Dies ist der einzige Ort, an dem ich es benutze:

  

SELECT @leadscount = (WÄHLE COUNT (*) FROM PURGE_LEAD);

Wie auch immer, um es zu testen, warum führen Sie den obigen Code nicht außerhalb des Transaktionskontexts aus?

Wenn Sie es wirklich in einer Transaktion benötigen, versuchen Sie, den Wert in eine Tabellenvariable zu laden (erstellen Sie eine Tabelle mit nur einer Spalte). Da sie nicht an Transaktionen teilnehmen, können Sie testen, ob die Transaktion Ihr wirkliches Problem ist.

    
Diego 25.01.2012 12:17
quelle