---
title: "Uppdatera 2 poster"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/11132-uppdatera-2-poster"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "doggelito"
published: "2001-08-14T15:25:00.000Z"
updated: "2001-08-15T20:33:00.000Z"
replies: 13
views: 316
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/asp/11132-uppdatera-2-poster"
---

# Uppdatera 2 poster

## #1 — doggelito, 2001-08-14T15:25Z

Jag vill kunna plocka ut 2 st poster i från min access-databas, sen vill jag ta värdet ifrån första postens kolumn som heter "nummer" med värdet "12" (t.ex.) och byta plats med den andra postens värde "7" (t.ex.).
Alltså, uppdatera första postens värde med den andra postens värde och tvärsom.

Om ni förstår mig, har någon en bra lösning?

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

## #2 — LarsG, 2001-08-14T15:31Z

```
  update t set c1 = c2,c2 = c1
```

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

## #3 — emission, 2001-08-14T16:22Z

Nej, så kan man inte göra, för då blir

c1=c2=c1, dvs. man får c2s värde i båda kolumnerna

På ett eller annat sätt måste man mellanlagra en av kolumnerna, vilket smidigast görs mha en extrakolumn

update t set temp = c1
update t set c1 = c2,c2=temp

\[r\]Å ena sidan kan man göra det i en UPDATE (temp = c1,c1 = c2,c2=temp), å andra sidan kan man sannolikt inte garantera exekveringsordningen, så tre separata är säkrast\[/r\]

\[Redigerat av emission den 14 aug 2001\]

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

## #4 — LarsG, 2001-08-14T17:03Z

Jag vet inte vad du använder för dbms, men det update-statementet fungerar alldeles utmärkt med den jag använder.

Och så skall det vara enligt SQL-standarden:

  The \<value expression\>s of a set clause are effectively evaluated for each row of T before updating any row of T

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

## #5 — emission, 2001-08-14T19:05Z

Det gläder mig att det ska vara så, men det funkar åtminstone inte så i MySQL. Access brukar inte vara bättre, men är det alldeles säkert i det här fallet.

Gött! :)

The \<value expression\>s of a set clause are effectively evaluated for each row of T before updating any row of T

Vid närmare eftertanke så säger ju inte det något om detta problem, eftersom vi fortfarande evaluerar inom en rad.

LarsG, finns det något som fastlägger exekveringsordningen på SET-satserna?

\[Redigerat av emission den 14 aug 2001\]

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

## #6 — doggelito, 2001-08-15T07:46Z

Hmm, missförstår jag er eller missförstår ni mig.
Om man nu ska använda LarsG rad:
update t set c1 = c2,c2 = c1
så uppdaterar väl den två kolumner i en och samma post eller?
Problemet som jag har är: kolumnen i två poster som ska byta plats.

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

## #7 — LarsG, 2001-08-15T07:58Z

Min fråga är tänkt tänkt att byta värden i två kolumner i alla poster.

Dvs om t innehåller 

C1!C2
\-----
1!2
2!3

så kommer den efter min update att innehålla

C1!C2
\-----
2!1
3!2

om din DBMS fungerar enligt standard.

**emission**

Jag förstår inte varför evalueringsordningen skulle förändra något.

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

## #8 — doggelito, 2001-08-15T08:09Z

Aha, nu förstår jag hur ni tror att jag menar!(förlåt om jag är dålig på att förklara mig!)
Jag tar det från början igen:
Jag har som sagt en tabell med en kolumn som heter "nummer". Sen vill jag ta ut två st poster och byta värdet från "nummer" i post 1 till post 2 och från "nummer" i post 2 till post 1.
Hajjar ni nu?
Typ så här:

nummer
\-----------
12
7

till
nummer
\-----------
7
12

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

## #9 — emission, 2001-08-15T09:02Z

Jag förstår inte varför evalueringsordningen skulle förändra något.

Det var en allmän fråga om SQL-standarden. Om DMBS:en inte beter sig som du beskrev, så är ordningen av betydelse.

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

## #10 — LarsG, 2001-08-15T11:45Z

Jag förstår ;)

Det är faktiskt inte specificerat i vilken ordning uttrycken evalueras.

Det finns ju vissa andra fall där det har betydelse, även om man evaluerar allt innan update, så det blir kanske en förfrågan/felrapport till iso.

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

## #11 — LarsG, 2001-08-15T11:54Z

Du får nog göra det mer programmeringsmässigt. Jag förutsätter att du har något unikt id i tabellen och om du t.ex. vill byta värden för posterna med id 11 och 47 så:

```

sql = "select id,nummer from t " & _
      " where id in (11,47) "
set rs = connect.execute(sql)
while not rs.eof
  if cint(rs("id")) = 11 then   
     sql1 = "update t set nummer = " & _
  rs("nummer") & _
" where id = 47 "
   else
      sql2 = "update t set set nummer = " & _
  rs("nummer") & _
" where id = 11 "
  end if
  rs.movenext
wend
rs.close
conn.execute sql1,,128
conn.execute sql2,,128
```

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

## #12 — emission, 2001-08-15T15:37Z

Det är faktiskt inte specificerat i vilken ordning uttrycken evalueras.

Huvudsaken är att det är specificerat så, så att man vet....

Faktum kvarstår...

"The \<value expression\>s of a set clause are effectively evaluated for each row of T before updating any row of T"

...tycker inte jag säger något om detta problem. Det kanske finns någon annan regel?

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

## #13 — LarsG, 2001-08-15T17:50Z

Jag tolkar texten som att man (konceptuellt) skall beräkna alla de nya värdena för kolumnerna innan man gör någon update överhuvudtaget. 

Sen så står det också att en update sker genom att man tar en kopia av den befintliga raden och modifierar den och att värdet av en kolumnreferens är värdet i den kolumnen i den befintliga raden.

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

## #14 — emission, 2001-08-15T20:33Z

Sen så står det också att en update sker genom att man tar en kopia av den befintliga raden och modifierar den och att värdet av en kolumnreferens är värdet i den kolumnen i den befintliga raden.

I that case, the thing is beef! :)

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/11132-uppdatera-2-poster
