none
SQL-Delete-Script mit Transaktion Rollback RRS feed

  • Frage

  • Hallo
    ich bin gerade beim Schreiben eines "Delete"-Scripts mehrere Tabellen, die auch in Beziehnung zu einander stehen. Jetzt kann es sein, dass vielleicht die eine oder andere Tabelle vergessen wurde zu löschen, und dadurch Daten in einer Tabelle nicht gelöscht werden können.
    Ich möchte das ganze in einer Transaction haben - und sollte solch ein Fehler (oder auch anderer Fehler) auftreten, dann für alles ein Rollback durchgeführt werden.
     
    Begin Transaction 
    GO
    	
    
    	delete from table1
    	go
    	delete from table1_1
    	go
    	delete from table2
    	go
             ......
             ......
             ......
             ......
    
    
    commit transaction 
    GO
    
    Meine Frage nun - Wie kann ich in solch einem einfachen Script auf einen Fehler reagieren, und dadurch ein Rollback ausführen ??
    
    Kann mir dazu bitte jemand weiterhelfen?
    
    Danke & schönen Gruß
    
    Michael
    

    Michael Erlinger
    Mittwoch, 20. April 2011 07:43

Antworten

  • Hallo Michael

    wenn Du den SQL Server 2005 oder eine höhere Version verwendest, kannst Du mit der TRY...CATCH Anweisung arbeiten und im CATCH Teil, der im Fehlerfalle ausgeführt wird, ein Rollback ausführen; siehe auch Thread "Transaction" .

    Begin Transaction

     

    BEGIN TRY

         delete from table1;

         delete from table1_1;

         delete from table2  

        commit transaction

    END TRY

    BEGIN CATCH

        ROLLBACK TRANSACTION

    END CATCH

    GO

     


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    • Als Antwort markiert M.Erlinger Mittwoch, 20. April 2011 11:37
    Mittwoch, 20. April 2011 07:59

Alle Antworten

  • Hallo Michael

    wenn Du den SQL Server 2005 oder eine höhere Version verwendest, kannst Du mit der TRY...CATCH Anweisung arbeiten und im CATCH Teil, der im Fehlerfalle ausgeführt wird, ein Rollback ausführen; siehe auch Thread "Transaction" .

    Begin Transaction

     

    BEGIN TRY

         delete from table1;

         delete from table1_1;

         delete from table2  

        commit transaction

    END TRY

    BEGIN CATCH

        ROLLBACK TRANSACTION

    END CATCH

    GO

     


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    • Als Antwort markiert M.Erlinger Mittwoch, 20. April 2011 11:37
    Mittwoch, 20. April 2011 07:59
  • Hallo

    danke für die rasche Rückmeldung und Hilfe zu meiner Frage!!!

    Schönen Gruß

    Michael


    Michael Erlinger
    Mittwoch, 20. April 2011 11:37