2015-03-10 12 views

risposta

6

Utilizzare la clausola OUTPUT per eseguire questa operazione.

Update table_name 
set col1='some_value' 
output inserted.* 
+1

Quello molto meglio :) – Juan

1

Sì, se si esegue nella stessa transazione entrambe le affermazioni non dovrebbero stallo tra di loro

Se avete paura di blocco critico con altre operazioni, si dovrebbe ridurre al minimo il blocco causato da transazioni, utilizzando una clausola indicizzata WHERE nello UPDATE ed evitando, se possibile, il livello di isolamento SERIALIZABLE. (ReadCommitted fa il trucco per te?)

1

Sì, dovrebbe andare bene. Si verifica un deadlock quando due sessioni SQL separate tentano di accedere allo stesso record nello stesso momento. Poiché l'aggiornamento e la selezione avvengono nella stessa transazione, li imporrà in modo sequenziale. Tuttavia, se più fonti eseguono la transazione, ciò potrebbe causare un deadlock.

0

per selezionare il valore inserito utilizzare la seguente query

UPDATE SET maths = 20,biology = 21 OUTPUT INSERTED.maths, INSERTED.biology WHERE student_id = 12 

per selezionare precedente uso valore

UPDATE SET maths = 20 OUTPUT DELETED.maths WHERE student_id = 12 
Problemi correlati