Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Che cosa fa una transazione attorno a una singola istruzione?

Non fa niente. Tutte le singole istruzioni SQL (con rare eccezioni come inserimenti in blocco senza registro o tronca tabella) sono automaticamente "in una transazione" indipendentemente dal fatto che tu lo dica esplicitamente o meno (anche se inseriscono, aggiornano o eliminano milioni di righe) .

EDIT:sulla base del commento di @Phillip di seguito... Nelle versioni correnti di SQL Server, anche gli inserti in blocco e la tabella di troncamento ne scrivono alcuni dati nel registro delle transazioni, anche se non tanto quanto altre operazioni. La distinzione fondamentale dal punto di vista transazionale è che in questi altri tipi di operazioni, i dati modificati nelle tabelle del database non sono nel registro in uno stato che ne consente il rollback.

Tutto ciò significa che le modifiche apportate dall'istruzione ai dati nel database vengono registrate nel registro delle transazioni in modo che possano essere annullate se l'operazione non riesce.

L'unica funzione fornita dai comandi "Begin Transaction", "Commit Transaction" e "RollBack Transaction" consente di inserire due o più singole istruzioni SQL nella stessa transazione.

EDIT:(per rafforzare il commento dei marchi...) SI, questo potrebbe essere attribuito a una programmazione "superstiziosa", oppure potrebbe essere un'indicazione di un malinteso fondamentale sulla natura delle transazioni del database. Un'interpretazione più caritatevole è che è semplicemente il risultato di un'applicazione eccessiva di coerenza che è inappropriata e ancora un altro esempio dell'eufemismo di Emerson che:

Una sciocca coerenza è l'hobgoblin delle piccole menti,
adorato da piccoli statisti, filosofi e teologi