8

Widziałem wykorzystanie transakcji w niektórych przypadkach, ale nigdy nie rozumiałem, w których sytuacjach powinny być używane. Jak i kiedy należy wykorzystać transakcje (rozpocząć transakcję)? Czytałem, że Microsoft nie sugeruje używać wyciągów transakcji (commit, rollback) wewnątrz wyzwalacza i procedury przechowywanej.Jak korzystać z transakcji (rozpocząć transakcję, dokonać transakcji)?

Odpowiedz

5

Transakcje mogą być używane w połączeniu z obsługą błędów w procedurach przechowywanych lub skryptach SQL podczas wstawiania lub manipulowania danymi, aby upewnić się, że wszystko jest spójne.

Na przykład, jeśli istnieje procedura składowana, która wstawia rekordy do tabeli nadrzędnej i tabeli podrzędnej, należy upewnić się, że rekord nadrzędny zostanie wstawiony jako pierwszy; jeśli się nie powiedzie, możesz wycofać zmiany, aby nie mieć osieroconego rekordu podrzędnego.

Erland Sommarskog ma numer great article dotyczący korzystania z obsługi błędów w SQL Server.

Wreszcie, gdzie firma Microsoft zasugerowała, aby używać transakcji w procedurach przechowywanych, a nie? Sądzę, że procedury składowane byłyby idealnym miejscem do ich wykorzystania.

+0

Dzięki, może moje oświadczenie o zbyt prosta: jest to ostrzeżenie, że za pomocą zobowiązania lub wycofania wewnątrz procedury lub wyzwalacza może powodować błędy: http://msdn.microsoft.com /en-us/library/ms187844(v=SQL.100).aspx – juur

2

Gdybym przeniesienie Moey z jednego konta na drugie, chciałbym go mieć 100% lub 100% udany zawieść:

UPDATE PersonalAccount SET Balance = Balance - 100 WHERE Username = 'gbn' 
--what if the server caught fire here? 
UPDATE SavingsAccount SET Balance = Balance + 100 WHERE Username = 'gbn' 

chodzi o to, co czytasz, pełne śmieci z wyjątkiem bez konieczności stosowania BEGIN TRAN w wyzwalaczu.

Przykład z „Nested stored procedures containing TRY CATCH ROLLBACK pattern?