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

MS SQL Server Discussion :

Pagination en SQL Server 2000


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Pagination en SQL Server 2000
    Bonjour,

    Je dois migrer du code PHP/MySQL en PHP/SQLServer.
    Le résultat d'une recherche ne dois afficher que 10 résultats par pages.
    (Le classique "aller à la page 1 2 3 4 ...").
    Avec MySQL, pas de problème, le code utilise la fonction LIMIT.
    Mais celle-ci n'existe pas sous SQLServer et la fonction TOP ne permet pas de spécifier à partir de quel enregistrement commencer.

    Or je suppose qu'il y forcément une solution puisque ce genre de pagination est très fréquent sur le Web.

    Mais laquelle?

    Merci.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 74
    Points : 84
    Points
    84
    Par défaut
    Salut Bilou : )

    alors voici un début de solution sansde controle d'erreur etc.. si quelqu'un a trouvé mieux je suis preneur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    CREATE PROCEDURE Ps_SQLLimit  (@sqlCMD as varchar(1024),@min as int,@max as int)
    AS
     
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
     
    BEGIN TRANSACTION
    	DECLARE @cmdALL as varchar(2048)
     
    	IF @min > @max 
    	RAISERROR ('@min ne peut etre superieur à @max ',16,1)
     
    	SET @cmdALL='SELECT IDENTITY(int,1,1) as MyRank, t.* INTO TmpTable FROM ( '  + @sqlCMD + ') as t'
     
    	exec (@cmdALL)
     
    		IF @@ERROR<> 0
    		GOTO LBL_ERR
     
    		SELECT * from TmpTable
    		WHERE MyRank BETWEEN @min and @max
     
    		IF @@ERROR<> 0
    		GOTO LBL_ERR
     
    		DROP TABLE TmpTable
     
    		IF @@ERROR<>0 
    		GOTO LBL_ERR
     
    COMMIT TRANSACTION
    GOTO LBL_FIN
     
    LBL_ERR:
    ROLLBACK TRANSACTION
     
    LBL_FIN:
     
    GO

    Avec une fonction UDF ca pourrait etre plus beau peut etre? avec une table en entrée? non? vous en pensez quoi ?

    En espérant que ca soit utile en tous cas..
    a+

  3. #3
    Nouveau membre du Club
    Profil pro
    Poste x dans une société
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Poste x dans une société

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Points : 38
    Points
    38
    Par défaut Probleme :)
    Lorsque le résultat de la requête comporte un nombre important de lignes , La navigation devienne lente

  4. #4
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    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 849
    Points : 52 975
    Points
    52 975
    Billets dans le blog
    6
    Par défaut
    le mieux est d'utiliser les fonctions d'ordonnancement prévues à cet effet. Voici deux exemples de pagination à l'aide de ces fonctions...
    http://sqlpro.developpez.com/SQL_Server_2K5/N1.php
    1.7 Fonctions de classement et d'énumération (norme SQL:2003) :

    A +

  6. #6
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    le mieux est d'utiliser les fonctions d'ordonnancement prévues à cet effet. Voici deux exemples de pagination à l'aide de ces fonctions...
    http://sqlpro.developpez.com/SQL_Server_2K5/N1.php
    1.7 Fonctions de classement et d'énumération (norme SQL:2003) :

    A +
    Fred : il est en SQL Server 2000 ...

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    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 849
    Points : 52 975
    Points
    52 975
    Billets dans le blog
    6
    Par défaut
    Il lui suffit de migrer ! ;-)

    Plus globalement avec la procédure qui vous a été montrée et son niveau d'isolation SERIALIZABLE et sans retour à un niveau normal, vous courrez à la catastrophe....

    a +

  8. #8
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    On est d'accord sur ça : n'utilisez surtout pas le code proposé, en niveau Serializable, mais plutôt les exemples de la FAQ, si vous ne voulez pas migrer

Discussions similaires

  1. Pagination dans sql server 2000 ?
    Par MAJIK_ENIS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/03/2006, 16h52
  2. Certification 70-228 sql server 2000
    Par Cotentin dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/11/2003, 09h01
  3. Débutant : SQL Server 2000
    Par bd0606 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/10/2003, 11h33
  4. Migration de MS SQL 7 vers MS SQL server 2000
    Par jfphan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/10/2003, 11h24
  5. problème de float sur SQL server 2000.
    Par fidji dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 24/07/2003, 14h15

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