Avatar billede vraa Nybegynder
02. maj 2006 - 15:06 Der er 7 kommentarer

MSSQL's svar på limit

Hvordan vælger jeg nogle records fra f.eks. plads 25-410 i en MSSQL database?
Avatar billede arne_v Ekspert
02. maj 2006 - 15:22 #1
Der er ikke rigtigt support for det i SQLServer.

Du kan selecte TOP 410, sortere omvendt og hente TOP 385, og saa sortere
normnalt igen.

Men det er nok lidt halv dyrt.

Ellers kan du overveje om du kan holde en query aaben eller om du evt. kan
have alle raekker i memory.
Avatar billede fennec Nybegynder
02. maj 2006 - 15:27 #2
... Det er normalt noget man gør i sit program (gennem programmering), for som arne_v nævner er der ikke en funktione til det som MySQL's Limit. Og at lave de to top/sortering koster arbejdskraft.
Avatar billede vraa Nybegynder
03. maj 2006 - 09:39 #3
Det er heller ikke en mulighed via Stored Procedure? Der er ikke nogen der ligger inde med en query som måske kan tage imod et par parametre, og gøre arbejdet for én?
Avatar billede arne_v Ekspert
03. maj 2006 - 13:13 #4
du kan gøre det med en stored procedure og en cursor

men du skal ikke forvente bedre performance af at flytte skip løkken
fra din applikation til databasen
Avatar billede vraa Nybegynder
17. maj 2006 - 10:10 #5
Tak for jeres svar. Baseret på jeres forslag kom min procedure til at se således ud:

CREATE PROCEDURE [dbo].[sp_brugere]
    @startRækkeNummer int,
    @antalBrugere int
AS
BEGIN
    Set NOCOUNT ON
    SELECT TOP (@antalBrugere) * FROM
    (
          SELECT CprNr, fornavne, efternavn,
          adresse, postnr, postby, tlfNr,
          ROW_NUMBER() OVER (ORDER BY CprNr) AS rækkeNummer
          FROM dbo.ViewBrugere
    ) AS brugereUdtræk
    WHERE rækkeNummer > @startRækkeNummer
    ORDER BY CprNr ASC
END

Jeg havde brug for at vælge 100 brugere ad gangen og ovenstående løste mit problem.
Læg et svar så får i point
Avatar billede fennec Nybegynder
17. maj 2006 - 10:15 #6
De må gå til Arne...
Avatar billede arne_v Ekspert
18. maj 2006 - 02:36 #7
det var faktisk ikke helt mit forslag

ovenstående udnytter en ny funktion i SQLServer 2005 nemlig ROW_NUMBER()
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester