2015-03-10 17 views

Odpowiedz

6

Aby to zrobić, należy użyć klauzuli OUTPUT.

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

Thats dużo lepiej :) – Juan

1

Tak, jeśli działają w tej samej transakcji oba oświadczenia nie powinny impasu między nimi

Jeśli boisz deadlocking z innych transakcji, należy zminimalizować blokady spowodowanej transakcji, wykorzystując zindeksowaną klauzulę WHERE w UPDATE i jeśli to możliwe unikanie poziomu izolacji SERIALIZABLE. (ReadCommitted Ci się podoba?)

1

Tak, powinno być dobrze. Zakleszczenie występuje, gdy dwie oddzielne sesje SQL próbują uzyskać dostęp do tego samego rekordu w tym samym czasie. Ponieważ Aktualizacja i Wybór odbywają się w tej samej Transakcji, zmusza je do wystąpienia sekwencyjnego. Jeśli jednak Twoja transakcja prowadzi wiele źródeł, może to spowodować zakleszczenie.

0

aby wybrać wstawiony wartość użyć następującego zapytania

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

aby wybrać wartość użytkową poprzednia

UPDATE SET maths = 20 OUTPUT DELETED.maths WHERE student_id = 12 
Powiązane problemy