Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[SQL] Hoe 2 waardes wisselen in een stored procedure?

Pagina: 1
Acties:

  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 22-09 14:46

Wijnbo

Electronica werkt op rook.

Topicstarter
Hallo, ik wil graag 2 waarden wisselen in een tabel : (Gaat om volgorde waarin iets staat)

Dus dit (2 kolommen):

Lorem 1
Ipsum 2
Dolor 3

Moet worden

Lorem 1
Ipsum 3
Dolor 2

Nu heb ik in een stored procedure het volgende :

SQL:
1
2
3
4
5
6
UPDATE nc_contentlistcontents 
SET pagenumber = pagenumber -1 
WHERE pagenumber = @pagenumber + 1
UPDATE nc_contentlistcontents 
SET pagenumber = @pagenumber + 1 
WHERE pagenumber = @pagenumber


Oftewel, waarde na geselecteerde waarde gaat 1 omlaag, komt dus hoger in de lijst, en geselecteerde waarde gaat 1 omhoog. Echter, beide komen op dezelfde plaats, dus het tweede update statement wordt ook uitgevoerd voor het record met de "nieuwe" positie. Wat doe ik verkeerd?

  • SiErRa
  • Registratie: Februari 2000
  • Laatst online: 12:37
Stel je geeft als parameter 2 op

Dan wordt bij de eerste statement het item met pagenumber 3 naar 2 gezet.
Vervolgens worden er 2 items geupdate van 2 naar 3.

Je kan het met 3 statements oplossen, je maakt er bij de eerste statement -1000 van.
De 2e doe je wel hetzelfde als nu.
En bij de derde zet je die -1000 weer goed.

  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 22-09 14:46

Wijnbo

Electronica werkt op rook.

Topicstarter
SiErRa schreef op maandag 23 juni 2008 @ 14:58:
Stel je geeft als parameter 2 op

Dan wordt bij de eerste statement het item met pagenumber 3 naar 2 gezet.
Vervolgens worden er 2 items geupdate van 2 naar 3.

Je kan het met 3 statements oplossen, je maakt er bij de eerste statement -1000 van.
De 2e doe je wel hetzelfde als nu.
En bij de derde zet je die -1000 weer goed.
Zoiets was ik al aan het proberen, maar dit gaat niet goed in een transactie denk ik toch? Dan zou ik gewoon normale update's met go's er tussen moeten doen?

  • SiErRa
  • Registratie: Februari 2000
  • Laatst online: 12:37
Ah ik ging er vanuit dat je niet in een transactie bezig was.

Doe je ook echt een BEGIN TRAN en COMMIT TRAN? Want anders is je probleem misschien ook wel opgelost.

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 01-11 22:03

leuk_he

1. Controleer de kabel!

Wijnbo schreef op maandag 23 juni 2008 @ 15:08:
[...]


Zoiets was ik al aan het proberen, maar dit gaat niet goed in een transactie denk ik toch? Dan zou ik gewoon normale update's met go's er tussen moeten doen?
Je bent toch helemaal in 1 transactie bezig (commit na laatste update). Dus het lukt helemaal, of helemaal niet.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • d00d
  • Registratie: September 2003
  • Laatst online: 16-09 13:23

d00d

geen matches

Je kunt dit oplossen door gebruik te maken van 1 update statement in combinatie met CASE, in je WHERE clause kun je dan met BETWEEN een filter aanbrengen.

42.7 percent of all statistics are made up on the spot.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Ideetje:
SQL:
1
2
3
UPDATE
SET pagenumber = (HI + LO - pagenumber)
WHERE pagenumber BETWEEN LO and HI

Werkt ook als LO en HI niet opeenvolgend zijn: 4,5,6 wordt 6,5,4.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1