2009-07-07 17 views

risposta

66

è possibile attivare autocommit impostando implicit_transactions OFF:

SET IMPLICIT_TRANSACTIONS OFF 

Quando l'impostazione è ON, si ritorna alla modalità di transazione implicita. Nella modalità di transazione implicita, ogni modifica effettuata avvia una transazione che è necessario eseguire manualmente.

Forse un esempio è più chiaro. Questo scriverà una modifica al database:

SET IMPLICIT_TRANSACTIONS ON 
UPDATE MyTable SET MyField = 1 WHERE MyId = 1 
COMMIT TRANSACTION 

Questo non scriverà una modifica al database:

SET IMPLICIT_TRANSACTIONS ON 
UPDATE MyTable SET MyField = 1 WHERE MyId = 1 
ROLLBACK TRANSACTION 

L'esempio che segue aggiornare una riga, e poi si lamentano che non c'è alcuna transazione a commettere :

SET IMPLICIT_TRANSACTIONS OFF 
UPDATE MyTable SET MyField = 1 WHERE MyId = 1 
ROLLBACK TRANSACTION 

Come Mitch Grano detto, autocommit è l'impostazione predefinita per SQL Server 2000 e fino.

6

L'autocommit è la modalità di gestione delle transazioni predefinita di SQL Server. (SQL 2000 in poi)

Rif: Autocommit Transactions

42

Volevo un modo più permanente e più rapido. Perché tendo a dimenticare di aggiungere righe aggiuntive prima di scrivere le mie domande di aggiornamento/inserimento.

L'ho fatto selezionando IMPOSTA IMPLICIT_TRANSACTIONS dalla casella Opzioni. Per accedere a Opzioni Selezionare Strumenti> Opzioni> Esecuzione query> SQL Server> ANSI in Microsoft SQL Server Management Studio.

Assicurati di eseguire commit o rollback dopo aver terminato di eseguire le query. Altrimenti, la tabella su cui avresti eseguito la query verrà bloccata per gli altri.

+2

Ho provato e posso confermare che sembra esattamente lo stesso di scrivere SET IMPLICIT_TRANSACTIONS ON, dal momento che sembra la risposta più corretta in 24 ore che assegnerò con la taglia. – Revious

2

Con SQLServer 2005 Express, ciò che ho scoperto è che anche con l'autocommit disattivato, gli inserimenti in una tabella Db sono stati eseguiti senza che in realtà io abbia emesso un comando di commit dalla sessione di Management Studio. L'unica differenza era che, quando l'autocommit era disattivato, potevo ripristinare tutti gli inserimenti; con * autocommit su, non ho potuto. * In realtà, ho sbagliato. Con la modalità autocommit disattivata, vedo le modifiche solo nella finestra QA (Query Analyzer) da cui sono stati emessi i comandi. Se ho aperto una nuova finestra QA (Query Analyzer), non vedo le modifiche apportate dalla prima finestra (sessione), vale a dire che NON sono state commesse! Ho dovuto emettere comandi di commit o rollback espliciti per rendere le modifiche visibili ad altre sessioni (QA windows) - my bad! Le cose stanno funzionando correttamente.

Problemi correlati