IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Pagination en T-SQL


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 126
    Par défaut Pagination en T-SQL
    Bonjour,
    je dois faire pour le boulot une pagination de resultat car on a une grosse base de donnee, j'aimerai savoir comment faire pour recuperer les elements 100 par 100 par exemple.

    Merci d'avance
    Julien

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonjour,

    Voir FAQ

    ++

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 126
    Par défaut
    Merci

    Excusez-moi, j'avais regarder mais jene me doutais pas que c'etais avec la fonction LIMIT

  4. #4
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    La fonction LIMIT vient de MySQL et permet de faire de la pagination.
    Cette fonction n'existe pas avec SQL Server.

    Le code fournit dans la FAQ permet de simuler la fonction LIMIT et d'obtenir une pagination de résultat.

    ++

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 126
    Par défaut
    Bonjour, j'ai essye d'implementer la fonction mais elle ne fonctionne pas, elle ne me retourne que les 20 premier resultats dans ce cas ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * FROM ( 
    			SELECT TOP 40 tbl1.ID, tbl1.WO_WORKORDERNO 
    			FROM ( 
    				SELECT TOP 20 A.ID, A.WO_WORKORDERNO 
    				FROM  WorkShop.PLTWKORD as A 
    				ORDER BY A.ID asc 
    				) AS tbl1 ORDER BY tbl1.ID desc 
    			) AS tbl2 ORDER BY tbl2.ID asc
    Merci d'avance

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bnojour,

    je dois faire pour le boulot une pagination de resultat car on a une grosse base de donnee
    Partitionnez !

    Au niveau des performances, je ne suis pas certain que votre requête soit très rapide, surtout sur un volume de données conséquent ...
    J'aurai plutôt vu une colonne auto-incrémentée et indexée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE maTable
    ADD numLigne INT IDENTITY NOT NULL
    @++

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 126
    Par défaut
    Bonjour, en quoi consiste l'indexation, car je ne suis pas responsable de la bd je dois juste y faire des acces, donc en terme de modification, je dois vendre la solution a mon superieur. ^^
    Donc j'aimerais savoir en quoi consiste l'indexation et IDENTITY

    Merci d'avance

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    La "simulation" de limit qui es proposée est mauvaise.

    Essaie plutôt ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH Ordered AS
    (
        -- Ici vient ton query
        SELECT
          ...
          , ROW_NUMBER() OVER (ORDER BY SELECT 1) AS Row
        FROM Sales.SalesOrderHeader 
        ...
    ) 
    SELECT * 
    FROM Ordered 
    WHERE Row BETWEEN 500 AND 600;

  9. #9
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    >> Sergejack
    Tu as raison celle-ci ne fonctionne pas en l'état. Il faudra corriger cela.

    je dois faire pour le boulot une pagination de resultat car on a une grosse base de donnee
    Qu'appelez vous grosse base de données ?
    Comme ça, je pencherais plus sur une solution comme le suggère Elsuket car plus votre table contiendra de lignes de données plus votre requête sera lente.

    Pouvez vous poster la DDL de votre table sur laquelle vous faites votre requête pour que nous puissons apporter une solution adéquate à votre problème ?

    ++

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 995
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 995
    Billets dans le blog
    6
    Par défaut
    Voici comment on pagine en SQL Server et en utilisant les fonctions normalisées de ranking : (extrait de mon papier : http://sqlpro.developpez.com/sqlserv...page=sql#LII-G)

    Voici un exemple, de pagination dans un jeu de résultats avec deux méthodes différentes.

    1) Pagination par bloc de ligne controlé (les lignes retournées sont controlées dans le filtre WHERE) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM   (SELECT   ROW_NUMBER() OVER(ORDER BY USR_ID) RNUM, 
                     USR_ID, USR_NOM, USR_PRENOM, 
            FROM     T_UTILISATEUR_USR) T 
    WHERE  RNUM BETWEEN 10 AND 19
    Ici on retourne les lignes numérotées 10 à 19.

    2) Pagination par nombre de page (le nombre de page est fixé, le nombre de ligne inconnu, la page retournée est contrôlée dans le filtre WHERE) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM   (SELECT   NTILE(25) OVER(ORDER BY USR_ID) NTL, 
                     USR_ID, USR_NOM, USR_PRENOM, 
            FROM     T_UTILISATEUR_USR) T 
    WHERE  NTL = 7
    Pour plus d'information sur ces fonctions, lisez l'article que j'ai écrit :
    http://sqlpro.developpez.com/article...clause-window/

    A +


    Ici on fixe le nombre de page à 25 et l'on retourne la page 7

    Una autre construction plus élégante est possible via la CTE.
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Pagination ASP avec SQL Server 2005
    Par webshop2 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/07/2013, 23h56
  2. Pagination en Transact SQL et SQL Server 2012
    Par Serguei_TARASSOV dans le forum Développement
    Réponses: 0
    Dernier message: 18/02/2012, 23h41
  3. Pagination PHP avec SQL SERVER
    Par Saramar dans le forum Langage
    Réponses: 1
    Dernier message: 10/07/2009, 11h25
  4. Pagination en SQL Server 2000
    Par biloumousse dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 29/09/2008, 14h38
  5. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo