Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ist die Ausführung gespeicherter T-SQL-Prozeduren „atomar“?

Dies ist für SQL Server.

Jede Anweisung ist atomar, aber wenn Sie möchten, dass die gespeicherte Prozedur atomar ist (oder eine beliebige Folge von Anweisungen im Allgemeinen), müssen Sie die Anweisungen explizit mit

umgeben

BEGIN TRANSACTION
Anweisung ...
Anweisung ...
COMMIT TRANSACTION

(Es ist üblich, kurz BEGIN TRAN und END TRAN zu verwenden.)

Natürlich gibt es viele Möglichkeiten, in Lock-Probleme zu geraten, je nachdem, was gleichzeitig vor sich geht. Daher benötigen Sie möglicherweise eine Strategie für den Umgang mit fehlgeschlagenen Transaktionen. (Eine vollständige Diskussion aller Umstände, die zu Sperren führen könnten, egal wie Sie sich diesen speziellen SP ausdenken, würde den Rahmen der Frage sprengen.) Sie können jedoch aufgrund der Atomarität erneut eingereicht werden. Und meiner Erfahrung nach wird es Ihnen wahrscheinlich gut gehen, ohne etwas über Ihr Transaktionsvolumen und die anderen Aktivitäten in der Datenbank zu wissen. Entschuldigen Sie, dass ich das Offensichtliche gesagt habe.

Im Gegensatz zu einem weit verbreiteten Missverständnis funktioniert dies in Ihrem Fall mit den Standardeinstellungen auf Transaktionsebene.