Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#4

Re: Seltsames Verhalten von ADO bei SET NOCOUNT ON

  Alt 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:
  Mit Zitat antworten Zitat