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 :

Stored Procedure, afficher le nombre total d'enregistrements


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut Stored Procedure, afficher le nombre total d'enregistrements
    Bonjour à tous,

    Je développe une application destinée à gérer des CV. Pour cela, j'ai créé la procédure stockée suivante :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    PROCEDURE [dbo].[sp_getCandidatsRechercheByPertinence]
    (
    -- Paramètres de pagination
    @startRowIndex INT,
    @maximumRows INT,
    -- Chaine à rechercher
    @Mots VARCHAR(1024)
    )
    AS
     
    SELECT	RowNum
    		,CandidatID
    		,CandidatPrenom
    		,CandidatNom
    		,CandidatEmail
    		,CandidatTelephone
    		,CandidatCompetences
    		,CandidatFonction
    		,ExperienceValeur
    		,DiplomeValeur
    		,CVDateExtraction
    		,SiteOrigineNom
    		,SuiteValeur
    		,Classement
    FROM
    (	SELECT	-- Informations sur le candidat
    			C.CandidatID
    			,C.CandidatNom
    			,C.CandidatPrenom
    			,C.CandidatEmail
    			,C.CandidatTelephone
    			,C.CandidatCompetences
    			,C.CandidatFonction
    			,E.ExperienceValeur
    			,E.ExperienceID
    			,D.DiplomeValeur
    			,D.DiplomeID
    			,S.SuiteValeur
    			-- Informations concernant le CV le plus récent du candidat
    			,CV.CVDateExtraction
    			,SO.SiteOrigineNom
    			-- Pertinence du résultat
    			,Key_Table.RANK as Classement
    			-- Numéro de ligne
    			,ROW_NUMBER() OVER(ORDER BY Key_Table.RANK DESC) as RowNum
    	FROM T_Candidat C
    		-- Informations sur le Candidat
    		INNER JOIN dbo.T_CV CV ON C.CandidatID = CV.CVCandidatID
    		-- Informations sur le diplome du candidat
    		INNER JOIN dbo.T_Diplome D ON C.CandidatDiplomeID = D.DiplomeID AND D.DiplomeIsActif = 1
    		-- Informations sur l'expérience du candidat
    		INNER JOIN dbo.T_Experience E ON C.CandidatExperienceID = E.ExperienceID AND E.ExperienceIsActif = 1
    		-- Informations sur la suite de la candidature
    		INNER JOIN dbo.T_Suite S ON C.CandidatSuiteID = S.SuiteID AND S.SuiteIsActif = 1
    		-- Informations sur le site d'origine du CV
    		INNER JOIN dbo.T_SiteOrigine SO ON CV.CVSiteOrigineID = SO.SiteOrigineID AND SO.SiteOrigineIsActif = 1
    		-- Pour cibler la recherche
    		INNER JOIN FREETEXTTABLE(dbo.T_CV, CVDocument, @Mots) AS Key_Table ON CV.CVID = Key_Table.[KEY]
    	WHERE CV.CVDateExtraction = (
    			SELECT TOP 1 CV.CVDateExtraction
    			FROM T_CV
    			WHERE CV.CVCandidatID = C.CandidatID
    			ORDER BY CV.CVDateExtraction DESC)
    ) as CandidatInfo
    -- On délègue la pagination à SQL Server en ne renvoyant qu'une partie du resultset
    WHERE RowNum BETWEEN @startRowIndex AND (@startRowIndex + @maximumRows) - 1
    -- On renvoie les résultats ordonnés par pertinence
    ORDER BY Classement DESC
    Elle retourne une liste de candidats qui correspondent à la chaîne de recherche (j'utilise une recherche FullText avec FREETEXTTABLE). Le résultat est paginé en fonction des paramètres @startIndexRow (ligne de début des résultats retournés) et @maximumRows (nombre de lignes maximum à retourner).

    La pagination étant déléguée à SQL Server, si j'ajoute

    à la fin de ma procédure, j'obtiens en général la même valeur que @maximumRows, puisque je limite volontairement le nombre de lignes.

    Comment faire alors pour récupérer le nombre de lignes total de la requête ?

    En vous remerciant par avance
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  2. #2
    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
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    PROCEDURE [dbo].[sp_getCandidatsRechercheByPertinence]
    (
    -- Paramètres de pagination
    @startRowIndex INT,
    @maximumRows INT,
    -- Chaine à rechercher
    @Mots VARCHAR(1024)
    )
    AS
    
    SELECT	RowNum
    		,CandidatID
    		,CandidatPrenom
    		,CandidatNom
    		,CandidatEmail
    		,CandidatTelephone
    		,CandidatCompetences
    		,CandidatFonction
    		,ExperienceValeur
    		,DiplomeValeur
    		,CVDateExtraction
    		,SiteOrigineNom
    		,SuiteValeur
    		,Classement
    		,Cnt
    FROM
    (	SELECT	-- Informations sur le candidat
    			C.CandidatID
    			,C.CandidatNom
    			,C.CandidatPrenom
    			,C.CandidatEmail
    			,C.CandidatTelephone
    			,C.CandidatCompetences
    			,C.CandidatFonction
    			,E.ExperienceValeur
    			,E.ExperienceID
    			,D.DiplomeValeur
    			,D.DiplomeID
    			,S.SuiteValeur
    			-- Informations concernant le CV le plus récent du candidat
    			,CV.CVDateExtraction
    			,SO.SiteOrigineNom
    			-- Pertinence du résultat
    			,Key_Table.RANK as Classement
    			-- Numéro de ligne
    			,ROW_NUMBER() OVER(ORDER BY Key_Table.RANK DESC) as RowNum
    			,COUNT(*) OVER() AS Cnt
    	FROM T_Candidat C
    		-- Informations sur le Candidat
    		INNER JOIN dbo.T_CV CV ON C.CandidatID = CV.CVCandidatID
    		-- Informations sur le diplome du candidat
    		INNER JOIN dbo.T_Diplome D ON C.CandidatDiplomeID = D.DiplomeID AND D.DiplomeIsActif = 1
    		-- Informations sur l'expérience du candidat
    		INNER JOIN dbo.T_Experience E ON C.CandidatExperienceID = E.ExperienceID AND E.ExperienceIsActif = 1
    		-- Informations sur la suite de la candidature
    		INNER JOIN dbo.T_Suite S ON C.CandidatSuiteID = S.SuiteID AND S.SuiteIsActif = 1
    		-- Informations sur le site d'origine du CV
    		INNER JOIN dbo.T_SiteOrigine SO ON CV.CVSiteOrigineID = SO.SiteOrigineID AND SO.SiteOrigineIsActif = 1
    		-- Pour cibler la recherche
    		INNER JOIN FREETEXTTABLE(dbo.T_CV, CVDocument, @Mots) AS Key_Table ON CV.CVID = Key_Table.[KEY]
    	WHERE CV.CVDateExtraction = (
    			SELECT TOP 1 CV.CVDateExtraction
    			FROM T_CV
    			WHERE CV.CVCandidatID = C.CandidatID
    			ORDER BY CV.CVDateExtraction DESC)
    ) as CandidatInfo
    -- On délègue la pagination à SQL Server en ne renvoyant qu'une partie du resultset
    WHERE RowNum BETWEEN @startRowIndex AND (@startRowIndex + @maximumRows) - 1
    -- On renvoie les résultats ordonnés par pertinence
    ORDER BY Classement DESC
    Essayez cette requête.

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Merci !

    J'ai essayé votre requête, et en effet je récupère bien le nombre total d'enregistrements (Cnt) sur chaque ligne.

    Cependant, une dernière question persiste : est-ce possible d'extraire cette valeur (Cnt) et de l'attribuer à un paramètre que l'on pourra retourner une fois la procédure stockée exécutée ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. Nombre total d'enregistrement dans un Form
    Par pleasewait dans le forum Access
    Réponses: 2
    Dernier message: 28/12/2006, 16h53
  2. [MySQL] afficher le nombre total d'enregistrements
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 21/03/2006, 22h14
  3. [MySQL] afficher le nombre total de message
    Par blastmanu dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 17/02/2006, 19h44
  4. [MySQL] LIMIT et nombre total d'enregistrements
    Par titoumimi dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/01/2006, 11h40
  5. Nombre Total d'Enregistrements d'une Requête d'Union
    Par sqlnet dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/12/2003, 17h12

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