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 :

Problème Requête dans un DTS


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut Problème Requête dans un DTS
    Bonjour tout le monde et heureuse année 2014.

    Je possède 3 tables(client,commande,lotcommande)
    un client peut faire plusieurs commande.Mais une commande appartient à un client.
    Une même commande peut avoir à plusieurs lots.Mais un lot sera issu d'une commande unique.
    j'ai donc: client (0,n)------>(0,1) commande (0,n)-------->(0,1)lotcommande

    Pour certains besoins,
    j'ai developpé cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select te.*,ce.*,le.lieu_depot
    from commande ce
    inner join client te 
    on (te.id_client=ce.id_client and te.tarif=ce.tarif)
    inner join lotcommande le
    on(ce.id_commande=le.id_commande and ce.region=le.region)
    where te.datecreation=2013
    order by datecreation asc
    Mais quand j'ai executé le DTS, les financiers me disent qu'ils ne voient pas tous les enregistrements.Après un test de la requête dans la base, j'ai bien tous les enregistrements, mais par le dts (sql server 2000, windows 2003, RAM 2Go), il ne me renvoie toujours pas la totalité des résultats et je ne vois pas où est le problème.
    J'ai opté pour cette solution:
    je découpe la requête en deux requêtes reliées par UNION

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select te.*,ce.*
    from client te
    inner join commande ce
    on (te.id_client=ce.id_client and te.tarif=ce.tarif)
    where te.datecreation=2013
    UNION
    select be.*,le.lieu_depot
    from commande be
    inner join lotcommande le
    on(be.id_commande=le.id_commande and be.region=le.region)
    qu'en pensez vous de ce découpage, l'optimisation vous semble améliorée ou en regression par rapport à la première requête?

    merci d'avance.
    Cordialement,
    J'ose espérer que m'a contribution vous a été d'une grande aide.
    Pensez tout de Même à dire MERCI et marquer RESOLU en cas de satisfaction.
    Paul

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Hello,

    Si je comprends bien ton problème je pense que tu as déjà un problème de jointure qui te pose problème (en accord avec ton modèle de données). En effet un client peut avoir 0 ou plusieurs commandes et une commande peut avoir 0 ou plusieurs lots comme tu le décris.

    Dans ce cas il faut utiliser des jointures externes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT 
     te.*,
     ce.*,
     le.lieu_depot
    FROM commande ce
    LEFT JOIN client te 
     ON (te.id_client=ce.id_client AND te.tarif=ce.tarif)
    LEFT JOIN lotcommande le
     ON(ce.id_commande=le.id_commande AND ce.region=le.region)
    WHERE te.datecreation=2013
    ORDER BY datecreation ASC
    Ensuite que fait ton lot DTS exactement ?

    ++

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Je ne comprend pas votre requete UNION, et d'ailleurs elle ne fonctionnera pas !
    Les eux SELECT doivent avoir le même nombre de colonnes, de même type.

    Il faudrait plutôt trouver pourquoi il vous manque des données avec votre première requête ! Quel est le type de la colonne datecreation ?

  4. #4
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut
    Merci de vos réponses.

    A mikedavem,
    Je ne voudrais pas avoir de NULL dans le résultat final.
    le DTS se connecte a une base sql server 2005, recupère les données avec la requête que j'ai montré.Ensuite ces données sont chargé dans une table de la base sous sql server 2000, après suit d'autres étapes de transformations.Mais déja dans la première table qui est supposée recevoir les données chargées, il n'y a pas toutes les données.

    A aieeeuuuuu,
    date de création est type date (YEAR).
    un year(te.datecreation)=year(getdate())-1 est semblable à
    year(te.datecreation)=2013 (cart de type int)

    Erratum: dans le where de la requète, c'est plutôt year(te.datecreation)=2013!!


    merci
    Cordialement,
    J'ose espérer que m'a contribution vous a été d'une grande aide.
    Pensez tout de Même à dire MERCI et marquer RESOLU en cas de satisfaction.
    Paul

  5. #5
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Tu peux nous montrer quelle tête à ton DTS ? (capture d'écran)
    Est-ce que tu as des erreurs quand tu executes ton DTS ?
    Question bête mais est-ce que le serveur de destination est bien le bon également ?

    ++

  6. #6
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut
    voici la tête du dts en Pièce jointe.
    La requête se trouve juste après le "succès de la RAZ des fichiers"

    merci
    Fichiers attachés Fichiers attachés
    Cordialement,
    J'ose espérer que m'a contribution vous a été d'une grande aide.
    Pensez tout de Même à dire MERCI et marquer RESOLU en cas de satisfaction.
    Paul

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/06/2014, 16h26
  2. [SQL SERVER 2005]problème requête dans un trigger
    Par Kropernic dans le forum Développement
    Réponses: 14
    Dernier message: 02/03/2010, 18h20
  3. problème de requête dans crystal reports
    Par rcs dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 05/08/2005, 16h45
  4. Problème requête SQL dans page ASP
    Par rocs dans le forum ASP
    Réponses: 14
    Dernier message: 26/07/2005, 15h38
  5. Réponses: 19
    Dernier message: 27/08/2003, 15h32

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