Jag har en SP med 4 inserts. Säg att insert #3 misslyckas men att de två första har gått igenom, det skulle ju förstöra en hel del minst sagt... Finns det någon möjlighet att rulla tillbaka mina två första inserts? Är det i databasen (sql-server) man gör detta eller måste jag skapa logik för detta i koden...?
Det beror lite på hur du exekverar din procedur. I t.ex. ASP kan du hantera transaktioner med Context-objekt för att göra Commit och Aborts, som sedan sköter resten av hanteringen själv. Annars får du skriva din SP med stöd för transaktioner i T-SQL, med BEGIN TRANS, ABORT, COMMIT osv.
Sök på dessa kommandon eller "transaction stored procedure" så får du säkerligen bra uppslag.
Fel av mig, @@ERROR måste fångas upp direkt efter varje INSERT så ovanstående kod skulle inte fungera. Så här ska det nog se ut (någon får gärna verifiera):
BEGIN TRAN
INSERT1...
IF (@@ERROR <> 0) GOTO ERROR
INSERT2...
IF (@@ERROR <> 0) GOTO ERROR
COMMIT TRAN
RETURN 0
ERROR:
PRINT 'Unexpected error occurred!'
ROLLBACK TRAN
RETURN 1
265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e