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