MSSQL Server 2008 R2 und Transactions/SavePoints



  • Hallo zusammen,

    ich verstehe den MS SQL Server nicht 😞
    Folgendes SQL Skript sollte doch eigentlich eine Zeile in eine Tabelle einfügen, oder verstehe ich nicht, wie sich unter MS SQL Transaktionen und Savepoints verhalten?

    -- Transaktion starten
    BEGIN TRANSACTION
    GO
    
    -- Zeile in db einfügen
    INSERT INTO dummy ( name ) VALUES( 'Zeile 1' )
    GO
    
    -- SavePoint erstellen
    SAVE TRANSACTION SavePoint01
    GO
    
    -- Zeile in db einfügen
    INSERT INTO dummy ( name ) VALUES( 'Zeile 2' )
    GO
    
    -- Zustand von SavePoint01 wiederherstellen
    ROLLBACK TRANSACTION SavePoint01
    GO
    
    -- Transaktion beenden und Änderungen übernehmen
    COMMIT TRANSACTION 
    GO
    

    Theorie:
    'Zeile 1' wird erzeugt, da sie vor dem SavePoint in die db eingetragen wird.
    'Zeile 2' wird nach dem SavePoint01 erzeugt und mit dem Rollback zu SavePoint01 wieder verworfen und landet damit nicht in der db.

    Praxis:
    Weder 'Zeile 1' noch 'Zeile 2' werden in die db eingetragen.

    Wie kriege ich das unter Theorie erwartete Verhalten hin?



  • Das muss mMn. so funktionieren.



  • Jau, tut´s auch, bin Opfer meiner Schusseligkeit geworden. Man sollte schon drauf achten, dass man sich das Ergbnis der Tabelle anschaut, in die man wirklich schreibt, und nicht eine andere 😃



  • Sehr gut! Wollte es heute eigentlich ausprobieren, hab dann aber vergessen. So kann ich mir das sparen.
    Danke für die Richtigstellung 🙂


Log in to reply