---
title: "Flera inserts där en går fel - rulla tillbaka"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/163300-flera-inserts-där-en-går-fel-rulla-tillbaka"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "butiko"
published: "2007-08-09T08:19:54.000Z"
updated: "2007-08-09T11:24:41.000Z"
replies: 4
views: 525
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/163300-flera-inserts-där-en-går-fel-rulla-tillbaka"
---

# Flera inserts där en går fel - rulla tillbaka

## #1 — butiko, 2007-08-09T08:19Z

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...?

Permalänk: https://www.webforum.nu/p/163300

## #2 — OveRRidE, 2007-08-09T08:23Z

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.

Permalänk: https://www.webforum.nu/p/2012872

## #3 — @nders, 2007-08-09T08:23Z

Använd transactions.

<http://www.codeproject.com/database/sqlservertransactions.asp>

Permalänk: https://www.webforum.nu/p/2012873

## #4 — butiko, 2007-08-09T08:50Z

Toppen! I sin enklaste form bör det alltså gå att bara sätta tran runt mina inserts och se om @@ERROR innehåller något fel...?

```
BEGIN TRAN 

  INSER 1, INSERT 2...

IF @@ERROR <> 0 
BEGIN 
  ROLLBACK TRAN 
  RETURN "fel"
END

ELSE
  COMMIT TRAN
```

Permalänk: https://www.webforum.nu/p/2012882

## #5 — butiko, 2007-08-09T11:24Z

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
```

Permalänk: https://www.webforum.nu/p/2012929

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/163300-flera-inserts-där-en-går-fel-rulla-tillbaka
