E 'possibile a UPDATE
una riga e quindi a SELECT
i dati aggiornati dalla stessa riga all'interno della stessa transazione senza timore di un deadlock?UPDATE e SELEZIONA una riga nella stessa transazione
risposta
Utilizzare la clausola OUTPUT
per eseguire questa operazione.
Update table_name
set col1='some_value'
output inserted.*
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?)
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.
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
Quello molto meglio :) – Juan