Dette er til SQL Server.
Hvert udsagn er atomisk, men hvis du ønsker, at den lagrede procedure skal være atomisk (eller en hvilken som helst sekvens af udsagn generelt), skal du udtrykkeligt omgive udsagn med
BEGYND TRANSAKTION
Erklæring ...
Erklæring ...
BEGÆND TRANSAKTION
(Det er almindeligt at bruge BEGIN TRAN og END TRAN for korte.)
Selvfølgelig er der mange måder at komme i låseproblemer, afhængigt af hvad der ellers foregår på samme tid, så du kan have brug for en strategi til at håndtere mislykkede transaktioner. (En komplet diskussion af alle de omstændigheder, der kan resultere i låse, uanset hvordan du udtænker denne særlige SP, er uden for spørgsmålets rækkevidde.) Men de vil stadig kunne indsendes igen på grund af atomiciteten. Og efter min erfaring vil du sikkert klare dig uden at kende til dine transaktionsmængder og de andre aktiviteter i databasen. Undskyld mig for at sige det åbenlyse.
I modsætning til en populær misforståelse vil dette fungere i dit tilfælde med standardindstillinger for transaktionsniveau.