2013-09-26 6 views
15

Ho effettuato alcuni aggiornamenti al mio record tramite SQL Server Manager.È necessario eseguire la dichiarazione di commit dopo l'aggiornamento in SQL Server

Poiché la dichiarazione di aggiornamento non ha il commit esplicito, sto provando a scriverlo manualmente.

Update mytable 
set status=0; 
Commit; 

sto ottenendo messaggio come Commit non è iniziare la transazione

+0

Si dovrebbe avviare una transazione prima di impegnarsi. –

+2

È necessario aprire una transazione. Al suo interno è necessario eseguire l'aggiornamento, quindi eseguire il commit delle modifiche. – lexeme

+0

Guarda come funziona qui: http://www.codeproject.com/Articles/10223/Using-Transactions-in-ADO-NET – lexeme

risposta

30

SQL Server Management Studio ha attivato il commit implicito, quindi tutte le istruzioni eseguite sono implicitamente impegnate.

Questa potrebbe essere una cosa spaventosa se provieni da uno sfondo Oracle in cui l'impostazione predefinita non è quella di non avere comandi commessi automaticamente, ma non è un gran problema.

Se si desidera continuare a utilizzare le transazioni ad hoc, si può sempre eseguire

BEGIN TRANSACTION 

all'interno di SQL Server Management Studio, e che il sistema attende a commettere i dati.

Se si desidera replicare il comportamento di Oracle, e avviare una transazione implicita, ogni volta che viene rilasciato un po 'di DML/DDL, è possibile impostare il SET IMPLICIT_TRANSACTIONS casella di controllo nella

Tools -> Options -> Query Execution -> SQL Server -> ANSI 
+2

Ciao @SWeko. molto utile, grazie. Ho ragione di presumere che la checkbox deselezionata significhi che le transazioni sono implicite in modo implicito? Questa è la mia situazione (predefinita). Il nome di quella casella di controllo è strano, quindi. btw, problema correlato qui: http://stackoverflow.com/questions/17576649/safely-delete-rows-in-sqlserver-so-you-can-rollback-a-commit –

+0

Grazie per la risposta – Patan

+0

Se la casella di controllo è controllato, quindi un'istruzione 'SELECT', avvia implicitamente una transazione, che dovrà essere esplicitamente impegnata. – SWeko

5

sql server a differenza di Oracle non ha bisogno impegna a meno che non si sta utilizzando le transazioni.
Immediatamente dopo l'istruzione di aggiornamento verrà eseguita la commit della tabella, non utilizzare il comando commit in questo scenario.

Problemi correlati