Commit e rollback

martedì 28 aprile 2009 - 16.47

Cyberking Profilo | Junior Member

Ciao,
vorrei provare ad eseguire direttamente nell'editor di sql server express un update utilizzando il commit
da quello che ho letto dovrei fare così

BEGIN TRANSACTION
update miaTabella set campo='si'
where id=77206

commit

ed eseguo,
poi se se voglio tornare indietro

BEGIN TRANSACTION
update miaTabella set campo='si'
where id=77206

rollback

la prima mi funziona, la seconda mi da l'ok, ma il valore non torna come il precedente
cosa sto sbagliando?

http://www.trovashop.it

lbenaglia Profilo | Guru

>BEGIN TRANSACTION
>update miaTabella set campo='si'
>where id=77206
>
>commit
>
>ed eseguo, poi se se voglio tornare indietro
...non puoi
Una volta che una transazione esplicita è stata resa persistente con il comando COMMIT TRAN si ritiene conclusa, quindi non puoi più recuperare il valore precedente.
COMMIT TRAN e ROLLBACK TRAN sono mutualmente esclusive e possono essere utilizzate per confermare o annullare una transazione esplicita.

>BEGIN TRANSACTION
>update miaTabella set campo='si'
>where id=77206
>
>rollback
>
>la prima mi funziona, la seconda mi da l'ok, ma il valore non
>torna come il precedente
Certo, la seconda transazione è completamente isolata dalla precedente: tu non fai altro che eseguire una UPDATE (casualmente sulla stessa riga e con lo stesso valore della colonna) ed annulli l'operazione con una ROLLBACK TRAN... riottenendo il valore della precedente transazione (che casualmente coincide ).

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Cyberking Profilo | Junior Member

Allora non ho capito come funziona il rollback

avevo capito che così potevo lanciare un update, e poter tornare indietro nel caso che non fosse giusta l'operazione eseguita

mi sai indicare come è possibile farlo?
http://www.trovashop.it

lbenaglia Profilo | Guru

>Allora non ho capito come funziona il rollback
>
>avevo capito che così potevo lanciare un update, e poter tornare
>indietro nel caso che non fosse giusta l'operazione eseguita
Esatto IN UNA SOLA TRANSAZIONE, non in 2 come nel tuo esempio

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Cyberking Profilo | Junior Member

no scusa,
allora non sono stato chiaro

prima sto lanciando la prima query dove metto sotto il commit

poi se non va bene o per verificare s emi torna indietro
lancio la stessa con la scritta sotto rollback
http://www.trovashop.it

lbenaglia Profilo | Guru

>no scusa,
>allora non sono stato chiaro
No, lo sei stato

>prima sto lanciando la prima query dove metto sotto il commit
>
>poi se non va bene o per verificare s emi torna indietro
>lancio la stessa con la scritta sotto rollback
E ti ripeto, SI TRATTA DI DUE TRANSAZIONI ESPLICITE DISTINTE, QUINDI IL ROLLBACK HA EFFETTO SOLO SULLA SECONDA!!!
E' chiaro ora?

Inizia a leggere questo paragrafo dei Books Online ed approfondisci il discorso con quelli correlati:
http://msdn.microsoft.com/it-it/library/ms190612.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5