ROLLBACK TRANSACTION bei Tabellen-Variablen

Im Zusammenhang mit der Entwicklung einer Cache-Logik bin ich auf ein kleines Problem gestoßen, auf dass ich hier kurz hinweisen möchte. Nehmen wir an, wir haben folgendes SQL-Skript:

  1. Leeren eines Tabelle
  2. Befüllen der Tabelle mit frischen Daten
Packt man die beiden Befehle (DELETE und INSERT) nicht in eine Transaktion, kann es passieren, dass man bei einem INSERT-Fehler auf einmal mit einer leeren Tabelle da steht (was ja nicht immer so gewollt ist). 
Also habe ich folgende erweiterte Logik umgesetzt:
  1. Erstelle eine Transaktion
    1. Leeren eines Tabelle
    2. Befüllen der Tabelle mit frischen Daten
  2. wenn beides ohne Probleme lief, dann festschreiben (COMMIT)
  3. wenn es ein Problem gab, Rückgängig machen (ROLLBACK)
In meinen Tests mit einer Tabellen-Variable (@table) wollte das aber partout nicht funktionieren und ich bin wahnsinnig geworden (fast jedenfalls). Eine Änderung der Tabelle von Variable auf Temp (also statt @table auf #table) und schon klappt alles.
In einem Blog-Post wurde mein Verdacht dann auch bestätigt: es geht einfach nicht. Rollback wird bei Tabellen-Variablen nicht unterstützt…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert