Bonjour,
Je travaille actuellement sur une procédure stockée très intéressante d'une base SQL SERVER 2000. Cette procédure interroge différentes tables en fonction des paramètres qui lui sont passés. En fait la requête exécutée est générée dans le code.
Mon problème est le suivant, cette procédure stockée doit lever une erreur si le nombre de lignes retournées est supérieur à 100 donc voici comment ceci est géré actuellement :
EXECUTE('IF (SELECT COUNT(DISTINCT INTER.NumeroInt) ' +@Requete + ') <= 100 SELECT DISTINCT INTER.*' + @Requete + ' ORDER BY INTER.NumeroInt ELSE RAISERROR 60000 ''' + 'Trop de résultats' + ' ''' )
Le problème de ce traitement c'est qu'il fait un COUNT puis si c'est bon il exécute à nouveau la requête pour avoir toutes les lignes du résultat, ce qui me semble loin d'être efficace. D'autant plus que certaines fois la requête exécutée va lire beaucoup de pages pour finalement afficher sur le poste client "Trop de résultats" .
Pour ma part j'ai essayé le code suivant :
1 2 3
| EXECUTE('SELECT DISTINCT INTER.*' + @Requete + ' ORDER BY INTER.NumeroInt' )
IF @@ROWCOUNT > 100
RAISERROR 60000 'Trop de résultats' |
Le problème c'est que le resultset issu de la requête SELECT est passé au client qui le traite. Le client affichant un popup pour chaque ligne retournée, je vous laisse imaginer le résultat sur le poste client quand le résultat dépasse quelques lignes !!!!!
J'ai donc un peu optimisé cette procédure en limitant le nombre de lignes retournées avec ce code :
EXECUTE('IF (SELECT COUNT(NumeroIntervention) FROM (SELECT DISTINCT TOP 101 INTERVENTION.NumeroIntervention ' +@Requete + ') AS TEMP) <= 100 SELECT DISTINCT INTERVENTION.*' + @Requete + ' ORDER BY INTERVENTION.NumeroIntervention ELSE RAISERROR 60000 ''' + 'Trop de résultats' + ' ''' )
J'aurais voulu savoir si vous connaissez un moyen de stopper l'exécution d'une requête si le nombre de lignes retournées dépasse une certaine valeur sans toutefois retourner le resultset issu de cette requête ?
Merci d'avance pour vos réponses.
Cdlt.
Dens19
Partager