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 :

Générer un select dynamiquement


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Janvier 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Janvier 2017
    Messages : 4
    Par défaut Générer un select dynamiquement
    Bonjour,

    Je viens de créer mon premier script dynamique (Faut bien débuter un jour !), mais il ne me renvoie rien. Si j'enlève la boucle while, j'obtiens la première ligne de ma requête.

    Mon objectif est d'obtenir la liste des personnes présentes par 1/4h. A terme la requête sera exploi

    Merci par avance pour votre retour.

    Nom : Script.JPG
Affichages : 963
Taille : 77,1 Ko

  2. #2
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Oulà vous partez dans du code extrémement complexe et peu performant ce genre de requète peut se faire beaucoups plus simplement...

    Mais pour répondre à votre question a chaque boucle vous écrasez votre variable @SQL en faisant @SQL=.... il faut la concaténer ainsi SET @SQL=@SQL +...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Janvier 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Janvier 2017
    Messages : 4
    Par défaut
    Merci pour votre retour.

    J'ai rajouté "set @SQL = @SQL + ' union ..." dans le "else".

    Mais cela ne change rien au résultat :
    - La requête SQL ne s'affiche pas (Print)
    - Le résultat est vide.

    Avec mon script de départ même si j'écrase la requête à chaque boucle, je devrais avoir au final la dernière partie de la requête qui comme par un "union" et avoir un message d'erreur. Non ? Ce n'est pas le cas

    Je suis également preneur pour simplifier ma requête.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 624
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Vérifiez que l'une des composantes de la concaténation n'est pas vide, c'est le cas classique de chaine finale vide

    Par ailleurs, il est préférable de construire une solution ensembliste plutôt que de procéder par boucle, votre traitement sera beaucoup plus performant

  5. #5
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    vous faites des comparaison sur des chaines ca ne peut pas marcher comme vous le souhaitez! : (boucle while)
    vous etes vous assuré que vous rentriez bien dans votre boucle?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Janvier 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Janvier 2017
    Messages : 4
    Par défaut
    Bonjour escartefigue,

    Etant novice, je ne sais pas ce que veut dire "une solution ensembliste". Pouvez-vous me préciser ? Merci par avance.



    iberserk,

    Mes deux données sont bien des Varchar(). Les heures dans les tables de l'application sur laquelle je dois faire mon édition sont sous ce format.

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 624
    Billets dans le blog
    10
    Par défaut
    C'est à dire que plutôt que de construire une boucle, et d'exécuter une requête à chaque itération, il est préférable de construire une requête qui sélectionne toutes les lignes dont vous avez besoin en une seule fois.
    Vu que dans votre cas vous voulez une ligne pour chaque plage de 15 minutes, le plus simple est de construire une table calendrier qui contient les plages dont vous avez besoin, et de faire une jointure avec les tables de votre requête.

    EDIT : je viens de voir votre réponse
    Citation Envoyé par jrm83 Voir le message
    iberserk,

    Mes deux données sont bien des Varchar(). Les heures dans les tables de l'application sur laquelle je dois faire mon édition sont sous ce format.
    Si vos dates et/ou heures sont au format Varchar dans votre base de données, alors allez tirer les oreilles du coupable et demandez lui de corriger ca d'urgence, car c'est la source de très nombreux problèmes quasi insurmontables : résultats faux, performances désastreuses, requêtes alambiquées, portabilité sur d'autres SGBD compliquée etc...
    Une date c'est un type date (ou date time ou timestamp), une heure c'est un type time, point barre !

  8. #8
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Janvier 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Janvier 2017
    Messages : 4
    Par défaut
    Merci à vous deux pour votre aide.

    Mon script fonctionne.

    Escartefigue,

    Je vais étudier votre solution avec une table calendrier. En revanche, je ne dirais rien à l'éditeur du soft .

    Bonne journée à vous deux et encore merci.

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 624
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par jrm83 Voir le message
    En revanche, je ne dirais rien à l'éditeur du soft .
    Et pourquoi donc ? c'est une très grave erreur de modélisation, un logiciel modélisé ainsi ne devrait même pas être sur le marché.
    Si votre fournisseur est intelligent, il comprendra les remarques constructives et argumentées, et prendra peut être en compte (là c'est beaucoup moins sur) ces pistes d'amélioration en compte, pour une version future.
    Dans le cas contraire, changez de fournisseur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 26
    Dernier message: 06/05/2009, 00h14
  2. [MySQL] select dynamique
    Par masseur dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 30/01/2006, 14h45
  3. question simple sur les select dynamiques
    Par grinder59 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 24/01/2006, 15h53
  4. Select dynamique
    Par mandaillou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/11/2005, 15h14
  5. Comment générer une image dynamiquement ?
    Par K20 dans le forum Langage
    Réponses: 12
    Dernier message: 19/11/2005, 01h27

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