SQL Server 2008: BEGIN TRY-und der BEGIN TRANSACTION-CURSOR
Ich versuche, eine Schleife durch eine Reihe von Aufzeichnungen und verarbeiten Sie. Der cursor sollte weiterhin Durchlaufen der Datensätze, auch bei einem FEHLER in der Verarbeitung, aber am Ende der batch, die ich sehen möchte, die Fehlermeldungen, ALLE Datensätze, die das produziert Fehler.
Ich habe den folgenden code:
AUSWÄHLEN....
OPEN cur
FETCH next FROM cur INTO
@some_variables
WHILE @@fetch_status = 0
BEGIN
BEGIN TRY
BEGIN TRANSACTION
...process the record...
COMMIT
END TRY
BEGIN CATCH
ROLLBACK
RAISERROR ('%s',16, 1, @variable_containing_error)
END CATCH
END
FETCH next FROM cur INTO
@some_variables
CLOSE cur
DEALLOCATE cur
Wenn ich zwei Datensätze, die beide mit Fehler, bekomme ich nur die erste Fehlermeldung und nicht die zweite Datensätze Fehlermeldung.
Ich bin nicht sicher, ob ich den BEGIN TRY-und TRANSACTION-Befehle richtig.
Kann mir bitte jemand helfen?
Brauchen Sie wirklich einen cursor?
InformationsquelleAutor Pierre Barnard | 2014-08-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie versuchen, die Transaktion, wenn Sie die rollback-es hält dein code versuchen Sie Folgendes:
Machen diesem code sehe ich einen Fehler, den Sie haben:
Schließen Sie den cursor, bevor Sie die fetch Next aus. Auch sollten Sie versuchen, die Letzte endet, wenn die Letzte fetch next aus.
Dies scheint zu funktionieren. Vielen Dank.
InformationsquelleAutor MelgoV
Ich vermute, dass der Fehler mit Schweregrad 16 Beendigung deiner batch.
Versuchen, etwas wie das zu tun:
Hier verwende ich einen geringeren Schweregrad drucken Sie die Fehlermeldungen, aber wenn ein Fehler geworfen wird, erhebe ich eine schwere Ebene 16 bei Abschluss des Batches.
InformationsquelleAutor Jim V.