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 :

[SQL SERVER 2000] Stopper exécution requête en fonction du nb de lignes retournées


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Points : 48
    Points
    48
    Par défaut [SQL SERVER 2000] Stopper exécution requête en fonction du nb de lignes retournées
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    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 ?
    Non cela n'est pas possible et c'est bien normal puisque pour un requête, on n'obtient jamais un sous-ensemble de l'ensemble répondant à la requête, sinon cela est tout simplement anti-relationnel, tout comme la clause TOP.

    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.
    Le fond du problème est là, il doit y avoir une erreur de conception dans votre modèle de données.

    Vous avez plusieurs solutions, classées par ordre de coût croissant et de propreté décroissant :

    - créer une vue qui compte le nombre de lignes de chaque table, et que vous pourrez requêter
    - revoir votre application pour qu'elle retourne la liste complète, et non pas à travers des popup
    - revoir votre modèle de données

    @++

Discussions similaires

  1. Exécuter requête sur SQL Server 2000
    Par zoubli dans le forum VBScript
    Réponses: 4
    Dernier message: 01/03/2007, 08h59
  2. [SQL-SERVER 2000] Problème de requête sur une seule ligne
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/04/2006, 16h54
  3. [SQL SERVER 2000] Fonction utilisateur : boucle sans fin
    Par galinijay dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/09/2005, 16h03
  4. Requêtes analyses croisées sous SQL Server 2000
    Par callo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/09/2005, 19h27
  5. fonction utilisateur non reconue par sql server 2000
    Par ouedmouss dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/09/2005, 07h46

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