Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Artiklar / Titel på artikeln

Använd while-loop med cursors i T-SQL

Postad 2004-04-10 av Simon Karlsson i sektionen ASP.NET, C#, Okategoriserat med 0 Kommentarer | Läst av: 5315, Betyg: 67%

Förord

Avancerad Transact-SQL – DEL 1 Whileloop med Cursor När man arbetar mot väldigt stora databaser så kan det ibland passa väldigt bra att använda en cursor i TSQL. Det handlar oftast om paging där tabellerna är stora nog för att dra ner responstiden, men det finns många andra områden där det passar sig väldigt bra. Paging ska jag gå in på i nästa del, nu börjar vi lite enklare.
Innehåll
  » TSQL Whileloop med Cursor
Följande exempel skulle gå att lösa på många andra sett men det är ett lättarbetat scenario.


TSQL Whileloop med Cursor

Låt oss säga att vi har en webbsida med en enorm massa konstverk. Alla kan gå in och ge ett guld till det konstverk som de tycker bäst om. Varje dag ska en column i konstverkstabellen uppdateras med konstverkens ”topplistplacering” baserat på hur många guld de fått.

En lösning vore att bara göra hämta hela tabellen med en SELECT * order by GULD och sedan lösa det i programmet med en loop som uppdaterar varje rad med dagens placering. Detta skulle innebära att hela tabellen och uppdateringar skulle fara mellan programmet och sql servern, vilket skulle innebära en prestanda förlust. Som sagt, detta är ett ganska dåligt exempel för det finns ju andra sätt att lösa det hela på men nu ska vi göra det med en CURSOR.


Declare MINCURSOR Cursor for
SELECT *
FROM Konsverk
order by GULD desc
for Read Only;


Här deklarerar vi vår CURSOR med hjälp av en SELECTsats. Själva CURSORN kan vi sedan använda för att gå fram eller tillbaka mellan raderna som returneras. I detta fall ska vi bara loppa framåt genom ”guld-topplistan”.


Open MINCURSOR;
Fetch Next from firstQuery

WHILE (@@fetch_status <> -1)
BEGIN
UPDATE Konsverk set
placering=@@rowcount
where current of MINCURSOR;

Fetch Next from MINCURSOR;
END;
close MINCURSOR;
deAllocate MINCURSOR;



Som ni lätt utläser här så startar vi vår CURSOR genom OPEN. Sedan flyttas vår CURSOR till första raden med hälp av Fetch Next .


WHILE (@@fetch_status <> -1)

Är står för själva while-loopen och den ska fortsätta tills @@fetch_status blir -1 (dvs, det finns inga rader kvar att hämta)


UPDATE Konsverk set
placering=@@rowcount
where current of MINCURSOR;


Här använder vi en vanlig UPDATE för att uppdatera kolumnen ”placering” med @@rowcount -radnumret where current of MINCURSOR - där MINCURSOR befinner sig just nu. Avlutningsvis stänger vi vår CURSOR och reslutaten är nu uppdaterade! Det här var menat som en mjukstart för er som aldrig rört en CURSOR. Nästa gång blir det värre.
Upp

0 Kommentarer

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 159
27 952
271 704
930
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies