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 :

Requete avec 2 bases de données ?


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2010
    Messages : 131
    Par défaut Requete avec 2 bases de données ?
    Bonjour,

    Voila j'ai un petit problème j'ai récupérer une grosse requête d'un projet que je dois "convertir" en web a partir de access sauf que niveau base de données access marche différemment est c'est plus facile de les gérer donc mon problème est que ma requête va récupérer des données dans 2 bases de données différentes sous access sa marchait car elles étaient lié

    Mais sous asp.net je ne sais pas les lié :s

    Je voudrais savoir si quelqu'un pouvait m'aidé sur ce point la ? x) Genre quel fonction utiliser, paramètre ...

    voila ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "SELECT  mission.pk, Commun_Offres.[N°Offre], company.company, client.client, mission.mission, mission.DateDebut, mission.DateFin,  mission.disable, mission.Accepte,  reference.pk, company.pk " & _
                    "FROM ((mission LEFT JOIN (Commun_Offres RIGHT JOIN reference ON Commun_Offres.[N°Offre] = reference.reference) ON mission.reference = reference.pk) LEFT JOIN client ON reference.client = client.pk) LEFT JOIN company ON Commun_Offres.societe = company.pk " & _
                    "WHERE (((mission.disable) = 'False') AND ((mission.DateFin)<CURRENT_TIMESTAMP))" & _
                    " ORDER BY mission.DateFin ASC;"
    Et enfait le "Commun_Offres" se trouve dans une autre base de données on va dire nommé "test"

    je met mon connectionstring si sa peut aidé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    oConnection.ConnectionString = "Server="###"\Sqlexpress;Initial Catalog='###'; Trusted_Connection=True;"
    merci d'avance

  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 : 44
    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
    Par défaut
    Bonjour,

    Héhé Access ...

    Il suffit simplement de préfixer le nom des objets que vous manipulez par la base de données et le schéma (ce qui devrait être tout le temps fait par défaut pour le second) auquel ils appartiennent.

    Je note plusieurs erreurs passablement grossières dans la requête que vous avez extraite d'Access (je sais que ce n'est pas vous ou la personne qui a développé la "base de données" Access qui en êtes responsable):

    - Les objets ne sont pas qualifiés par le nom du schéma auquel ils appartiennent (par défaut c'est dbo)
    - Les jointures devraient autant que cela est possible être toutes du même type. Passer d'un RIGHT JOIN à un LEFT JOIN est souvent très simple
    - le type de la colonne disable de la table mission devrait être bit. Si ce n'est pas le cas, changez le !
    - Le nom de la colonne [N°Offre] de la table Commun_Offres, en plus de ne pas respecter le standard SQL, est dangereux à l'utilisation.

    Ce qui fait que vous pouvez écrire votre requête comme suit :

    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
    SELECT		M.pk
    		, CO.[N°Offre]
    		, CP.company
    		, CL.client
    		, M.mission
    		, M.DateDebut
    		, M.DateFin
    		, M.disable
    		, M.Accepte
    		, R.pk
    		, CP.pk 
    FROM		maBDLocale.dbo.reference AS R
    LEFT JOIN	maBDLocale.dbo.mission AS M
    			ON Commun_Offres.[N°Offre] = reference.reference
    LEFT JOIN	Test.dbo.Commun_Offres AS CO
    			ON M.reference = R.pk
    LEFT JOIN	maBDLocale.dbo.client AS CL
    			ON reference.client = client.pk
    LEFT JOIN	maBDLocale.dbo.company AS CP
    			ON Commun_Offres.societe = company.pk
    WHERE		M.disable = 'False'
    AND		M.DateFin < CURRENT_TIMESTAMP
    ORDER BY	M.DateFin ASC
    Petite question : pourquoi ne pas regrouper ces deux bases de données en une seule, éventuellement dans deux schémas différents ?
    Les schémas sont un regroupement logique d'objets au sein d'une base de données, qui vous permettent de gérer plus finement l'attribution des privilèges d'accès aux données, entre autres ...

    @++

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2010
    Messages : 131
    Par défaut
    Désolé de répondre si tardivement mais j'avais oubléi ce topic ...

    Je galère beaucoup avec ce system de requete sur 2 bdd car sous access c'est très facile de le faire ... et sur l'appli que je dois convertir, il est utilisé souvent :/

    Donc j'ai testé ton truc en créant une requete sur sql manager mais j'ai un probleme :

    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
    SELECT		M.pk
    		, CO.[N°Offre]
    		, CP.company
    		, CL.client
    		, M.mission
    		, M.DateDebut
    		, M.DateFin
    		, M.disable
    		, M.Accepte
    		, R.pk
    		, CP.pk 
    FROM		[CONTRAT EUROPESQL].dbo.reference AS R 
    LEFT JOIN	[CONTRAT EUROPESQL].dbo.mission AS M 
    			ON CO.[N°Offre] = R.reference
    LEFT JOIN	[PARAM_CT_EUROPE].dbo.Commun_Offres AS CO 
    			ON M.reference = R.pk
    LEFT JOIN	[CONTRAT EUROPESQL].dbo.client AS CL
    			ON R.client = CL.pk
    LEFT JOIN	[CONTRAT EUROPESQL].dbo.company AS CP
    			ON CO.societe = CP.pk
    WHERE		M.disable = 'False'
    AND		M.DateFin < CURRENT_TIMESTAMP
    ORDER BY	M.DateFin ASC
    Sa fait une erreur sur "CO.[N°Offre] au niveau du premier "LEFT JOIN" car je penses qu'il reconnait pas l'alias vu qu'il est crée après :s

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    L'ordre des tables a une importance syntaxique pour l'évaluation du FROM, justement à cause des jointures externes.

    Essayez ainsi :
    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
      SELECT M.pk
           , CO.[N°Offre]
           , CP.company
           , CL.client
           , M.mission
           , M.DateDebut
           , M.DateFin
           , M.disable
           , M.Accepte
           , R.pk
           , CP.pk 
        FROM [CONTRAT EUROPESQL].dbo.reference AS R 
             LEFT OUTER JOIN [PARAM_CT_EUROPE].dbo.Commun_Offres AS CO
               ON CO.[N°Offre] = R.reference
             LEFT OUTER JOIN [CONTRAT EUROPESQL].dbo.mission AS M 
               ON M.reference = R.pk
              AND M.disable = 'False'
              AND M.DateFin < CURRENT_TIMESTAMP
             LEFT OUTER JOIN [CONTRAT EUROPESQL].dbo.client AS CL
               ON CL.pk = R.client
             LEFT OUTER JOIN [CONTRAT EUROPESQL].dbo.company AS CP
               ON CP.pk = CO.societe
    ORDER BY M.DateFin ASC;

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2010
    Messages : 131
    Par défaut
    La requête c'est exécuté mais sa m'a pas donné comme la requete venant d'access :s

    Je sens qu'a ce niveau, la conversion va etre dur

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Essayez ainsi, car je ne suis pas convaincu de l'intérêt de toutes les jointures externes que vous avez dans votre requête initiale :
    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
      SELECT M.pk
           , CO.[N°Offre]
           , CP.company
           , CL.client
           , M.mission
           , M.DateDebut
           , M.DateFin
           , M.disable
           , M.Accepte
           , R.pk
           , CP.pk 
        FROM [CONTRAT EUROPESQL].dbo.reference AS R 
             INNER JOIN [PARAM_CT_EUROPE].dbo.Commun_Offres AS CO
               ON CO.[N°Offre] = R.reference
             INNER JOIN [CONTRAT EUROPESQL].dbo.mission AS M 
               ON M.reference = R.pk
             LEFT OUTER JOIN [CONTRAT EUROPESQL].dbo.client AS CL
               ON CL.pk = R.client
             LEFT OUTER JOIN [CONTRAT EUROPESQL].dbo.company AS CP
               ON CP.pk = CO.societe
       WHERE M.disable = 'False'
         AND M.DateFin < CURRENT_TIMESTAMP
    ORDER BY M.DateFin ASC;

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

Discussions similaires

  1. Requete sur 2 bases de donneés à partie d'un composant ADO
    Par Brice Yao dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/09/2005, 16h26
  2. Réponses: 6
    Dernier message: 20/09/2005, 22h28
  3. Gestion des chemins des images avec une base de données...
    Par Nean dans le forum Bases de données
    Réponses: 4
    Dernier message: 27/07/2005, 08h08
  4. probleme avec une base de donnée postgres SQL
    Par Alexlesilex dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/06/2005, 22h09
  5. problème avec ma base de données
    Par pmboutteau dans le forum ASP
    Réponses: 6
    Dernier message: 25/02/2005, 12h59

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