(Gast)
n/a Beiträge
|
Re: Seltsames Verhalten von ADO bei SET NOCOUNT ON
11. Okt 2005, 02:33
Eventuell ist dieser MSDN Artikel was für dich....
Man kann zusätzlich mit GOTO zwischen "Abbruch-Kreterien" und "verschmerzbare Fehler" differenzieren.
So kannst du schon im SQL-Code entscheiden, ob die Verarbeitung der SP abgebrochen oder vortgesetzt wird.
Deine Applikation bekommt auf diesem Wege das SP-Ende und ggf. die Exceptions mit ...
Hier mal ein ungetestetes Beispiel ...
SQL-Code:
BEGIN TRAN
INSERT INTO Adressen
( Vorname
,Nachname
,Strasse
,PLZ
,Ort
)
VALUES
( ' Paul'
,' Panther'
,' Katzenberg 12'
,' 12345'
,' Testdorf'
)
SELECT @soft_error = @@ERROR
-- weicher Fehler - Kein Abbruch !
INSERT INTO Adressen
( Vorname
,Nachname
,Strasse
,PLZ
,Ort
)
VALUES
( ' Fred'
,' Feuerstein'
,' Höhle 12'
,' 12345'
,' Testdorf'
)
SELECT @soft_error = @@ERROR + @soft_error
-- weicher Fehler - Kein Abbruch + Commit!
INSERT INTO Adressen
( Vorname
,Nachname
,Strasse
,PLZ
,Ort
)
VALUES
( ' Barney'
,' Geröllheimer'
,' Höhle 13'
,' 12345'
,' Testdorf'
)
IF @@ERROR <> 0 GOTO ROLLBACK_AND_ABORT
-- Abbruch Kreterium - im Fehlerfall Ausführung unterbrechen und Rollback!
INSERT INTO Adressen
( Vorname
,Nachname
,Strasse
,PLZ
,Ort
)
VALUES
( ' Bux'
,' Bunny'
,' Irgendwo 22'
,' 12345'
,' Testdorf'
)
IF @@ERROR <> 0 GOTO ROLLBACK_AND_ABORT
-- Abbruch Kreterium - im Fehlerfall Ausführung unterbrechen und Rollback!
-- ...
-- viele weitere Befehle
-- ...
COMMIT TRAN
IF @soft_error > 0 THEN
BEGIN
-- Applikation über "weiche Fehler" informieren
-- Eventuell wäre anstatt der Exception auch ein Ausgabeparameter sinnvoll.
RAISERROR(CAST(@soft_error AS VARCHAR(10))+' unwichtige Datensätze wurden nicht eingefügt',16,1,' Dein Prozedurname')
END
-- die weichen Fehler wurden ignoriert und die Transaktion Committed ...
-- jetzt springen wir an das Ende der SP
GOTO PROCEDURE_ENDE
ROLLBACK_AND_ABORT:
-- Mindestens eine Abbruchbedingung ist erfüllt.
-- Transaktion rückgängig machen und die weitere Verarbeitung abbrechen
ROLLBACK TRAN
RAISERROR(' Die Transaktion wurde verworfen, weil ein harter Fehler aufgetreten ist',16,1,' Dein Prozedurname')
PROCEDURE_ENDE:
|
|
Zitat
|