Ciao,
vi scrivo per avere delucidazioni in merito a quanto in oggetto.
Ammetto di avere discreta confusione in merito.
Begin Transaction:
- si usa con le transazioni di modifica. Insert, update, delete
- non si usa con select
- tendenzialmente non lo uso su create (sp, view...)
Tutto ciò che si trova fra la begin tran e la commit è sottoposto alla proprietà "Atomic". ovvero, basta una, per esempio, insert, per causare il rollback di tutte le altre. giusto?
Indipendentemente dal mettere i "go" alla fine di ciascun statement.
ad esempio:
SET XACT_ABORT ON
GO
BEGIN TRANSACTION
GO
INSERT INTO..... #1
GO
INSERT INTO.....#2
GO
INSERT INTO.....#3
GO
INSERT INTO.....#4
GO
COMMIT
GO
Se la insert #3 va in errore. la #4 non viene eseguita e la #1 e #2 vengono mandate in rollback.
Corretto?
Esiste un modo per far si che, in caso di errore sulla #3, le prime due vengano comunque tenute buone? un modo oltre ad aprire una singola begin tran-commit per ciascun insert into.
altra considerazione a latere.
sempre riprendendo l'esempio sopra. se l'errore non è di consistenza ma sintattico, ad esempio "INSSSSSERT INTO" sulla #3. l'esecuzione andrà in errore ma le prime due verranno correttamente applicate.
Grazie in anticipo a chiunque vorrà dare il suo contributo
V.