---
title: "Update +1 i nästa post."
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/82544-update-1-i-nästa-post"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "SteveP"
published: "2003-07-23T12:03:15.000Z"
updated: "2003-07-23T13:14:34.000Z"
replies: 7
views: 280
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/82544-update-1-i-nästa-post"
---

# Update +1 i nästa post.

## #1 — SteveP, 2003-07-23T12:03Z

Jag har en tabell med en massa poster i.
Primary keyn är PostID
Användaren styrs genom "ContactID"
Sen finns ett fält som heter "serial"

När jag nu ska göra en ny Insert så måste jag ta reda på det Högsta "serial" värdet för dom posterna som har ContactID't som är bundet i querystringen, och plussa på "1"

Så om den högsta posten som finns just nu har

ContactID
16

Serial 
1000

Så ska nästa post bli

ContactID
16

Serial
1001

Men jag kan inte använda Autoincrement på "serial" eftersom flera poster kan ha samma serial men olika ContactID's.
nån ide?

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

## #2 — SteveP, 2003-07-23T12:33Z

kan jag inte göra nåt i denhär stilen?

Jag skapar först MaxSerial i asp sidan, ungefär såhär

```

Select
Max(Serial) as MaxSerial
from
tblPostList
Where ContactID = "& Request.Querystring("ContactID")
```

Sen Sp'n

```
--SP'n

@ContactID INT,
@Serial INT
@MaxSerial = @MaxSerial +1

AS

Insert 
into tblPostList

(ContactID, Serial)

Values 

(@ContactIDVariable, @MaxSerial)

GO
```

Men jag vet inte riktigt hur jag ska få ut Maxserial ur den första queryn och lägga in den i den andra och plussa på ett?
Men jag kanske tänker i rätt riktning?

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

## #3 — LarsG, 2003-07-23T12:40Z

Har för mig att du använder SQL server så det är väl bäst att göra en procedur.

```
create procedure mc_1 @contactId int <,andra parametrar>
as
begin
 declare @serial int
 begin transaction
select @serial = coalesce(max(serial),0) + 1 
from t with (holdlock)
where contactid = @contactid

insert into t values (@serial<,andra värden>)
commit
end
```

Du får nog fila lite på flehanteringen

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

## #4 — SteveP, 2003-07-23T12:41Z

Det ser ju lite smidigare ut att ha allt i en SP

Jag testar, tack!

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

## #5 — SteveP, 2003-07-23T12:44Z

Vad är 

```

select @serial = [b]coalesce[/b](max(serial),0) + 1 

samt

(holdlock)
```

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

## #6 — LarsG, 2003-07-23T12:48Z

coalesce är för att hantera det fall då det inte finns något  matchande contactid i tabellen. Resultatet av max blir då null och mha coalesce så översätts det till 0.

holdlock anger att de rader som har lästs skall förbli låsta tills dess att transaktionen avslutas. Det är ganska väsentligt för att förhindra att flera personer får samma serial-värde.

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

## #7 — SteveP, 2003-07-23T12:53Z

Ah suveränt!

Vad gör "Nollan" framför +1 ?
Är det värdet som sätts in genom "coalesce" om det inte finns nåt matchande ContactID ?

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

## #8 — LarsG, 2003-07-23T13:14Z

Jo

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/82544-update-1-i-nästa-post
