Domanda

Alcuni minuti fa, mentre elaboravo un nuovo sproc, ho eseguito l'istruzione di eliminazione errata. Qualcosa del genere:

Delete From SomeTable Where SomeStatusID=1

Dopo 10 secondi, mi sono reso conto che ho digitato lo stato sbagliato e ho premuto Annulla. Ha detto che la dichiarazione è stata cancellata.

Ho eseguito un ripristino in un database separato per ripristinare la tabella che presumibilmente ho semplicemente rovinato, pensando che dato che non si trovava in una transazione alcuni record sarebbero stati probabilmente eliminati.

Stranamente, i record erano tutti intatti. Solo curioso di sapere perché questo è stato: ha trattato la singola dichiarazione di eliminazione come una transazione in questo caso, anche se non è stata definita una transazione esplicita?

È stato utile?

Soluzione

Per impostazione predefinita, una singola istruzione DML viene eseguita come transazione. Se la dichiarazione ha esito positivo, la transazione viene impegnata. Se l'istruzione viene annullata o altrimenti non riesce, la transazione viene ripristinata.

Questo comportamento è integrato nel motore e non è correlato a Management Studio. Vedi Transazioni di autocommit nei documenti.

Altri suggerimenti

Esistono sempre transazioni. L'unica cosa che cambia è il modo in cui tali transazioni sono isolate l'una dall'altra e che in Management Studio la transazione potrebbe non essere definita in modo esplicito e viene impegnata automaticamente al termine della query.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top