2016-04-26 9 views
0

Ich las Artikel über Rollback-Transaktion und kann nicht finden, etwas wie ich brauche. Angenommen, ich habe eine Benutzertabelle. Der Benutzer kann seine Datensätze aktualisieren, aber ich möchte einen Rollback durchführen, wenn der eingegebene Wert null ist. Ich weiß, es gibt viele einfache Möglichkeiten, dies zu tun, wie zum Beispiel mit C# zu überprüfen, ob es null ist und solche Dinge, die hier auftauchen, verstehen Rollback. Wie kann ich Rollback mit If (Null) Code verwenden?Rollback wenn Null

+0

Warum nicht einfach NOT NULL Spalten? – jarlh

+0

Wie ich schon sagte gibt es viele Möglichkeiten dies zu tun und nicht null ist einer von ihnen, aber ich brauche ein Beispiel für Rollback mit if. Es kann etwas wie "wenn Alter <40 dann Rollback" sein. Das Überprüfen von null war nur ein Beispiel @jarlh –

+0

Bitte beschriften Sie, welche Sprache Sie verwenden und welchen Code Sie versucht haben. –

Antwort

2

Rollback wird mit einer Transaktion verwendet, ein Rollback stellt den Zustand wieder her, wie er war, als begin tran ausgeführt wurde.

BEGIN TRAN 'tran1' 
     INSERT INTO Whatever table... 
     IF(... check for null) 
     BEGIN 
     ROLLBACK TRAN 'tran1' 
     RETURN 0 
     END 
COMMIT TRAN 'tran1' 
2

Es gibt drei Möglichkeiten. Erstens, wenn Ihre Schecks nur auf eine Spalte, verwenden Sie die check Einschränkung für die Spaltendefinition:

create table test (
     age int check (age > 40), 
     ... 
); 

Fore komplexeren Einschränkungen, werden Sie triggers benötigen. Die Art der verfügbaren Trigger hängt von der Technologie ab (Oracle, SQL Server, MySQL). In einem vor dem Einfügen oder vor dem Update Trigger, können Sie eine Ausnahme generieren, die automatisch die Transaktion endet (entspricht einem Rollback). Hier ist ein mysql Beispiel:

delimiter // 
drop trigger if exists trg_trigger_test_ins // 
create trigger trg_trigger_test_ins before insert on test 
for each row 
begin 
    declare msg varchar(128); 
    if new.age <= 40 then 
     set msg = concat('MyTriggerError: age incorrect : ', cast(new.id as char)); 
     signal sqlstate '45000' set message_text = msg; 
    end if; 
end 
// 

Schließlich können Sie starten eine Transaktion, Ihre Änderungen vornehmen, dann entscheiden, ob Sie wollen oder Rollback begehen.

0

Transaktion rückgängig zu machen Sie erste Transaktion beginnen. In der Regel haben DBMS implizite Transaktionen. Wenn nichts angegeben ist, startet jede Anweisung oder jeder Batch seine eigene Transaktion. Oder Sie können Transaktionsgrenzen explizit definieren.

Wenn Sie also eine (implizite, explizite) Transaktion benötigen, bei der die angegebene Spalte auf NULL gesetzt wird, um fehlzuschlagen und einen Rollback auszuführen, definieren Sie die Einschränkung für diese Spalte.

Alternativ können Sie nur einige explizite Transaktionen Rollback abhängig von dieser Spalte Wert und einige andere Bedingungen. Sie sollten diesen Code also explizit einchecken.