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

VB.NET Discussion :

Requêtes SQL multi bases


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 71
    Par défaut Requêtes SQL multi bases
    Bonjour à toutes et tous,

    J'ai trouvé un moyen de contourner mon problème d'ores et déjà mais je pose la question par curiosité : est-il possible d’effectuer une requête sur SQL-Server qui concerne plusieurs bases à la fois ? C'est à dire se connecter à une instance, mais pouvoir lancer une requête qui fait appel à plusieurs bases présentes sur celle-ci, comme on pourrait le faire dans l'analyseur de requête, du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim QueryTestModif As String = "SELECT CTPROD.CT_Num " & _
            "FROM [MaBase1].[dbo].[F_COMPTET] As CTPROD INNER JOIN [MaBase2].[dbo].[F_COMPTET] As CTBACKUP ON " & _
            "CTPROD.CT_Num = CTBACKUP.CT_Num" & _
            "WHERE CTPROD.CT_Type = 0 AND CTPROD.cbModification <> CTBACKUP.cbModification"
     
    (...)
    J'ai bien sûr trouvé un moyen en gérant cela en plusieurs requêtes sur chacunes des 2 bases, puis en gérant le comparatif dans le code et donc pas en SQL.

    Des idées ?

    Merci messieurs dames de votre attention

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour

    Citation Envoyé par nico1492 Voir le message
    est-il possible d’effectuer une requête sur SQL-Server qui concerne plusieurs bases à la fois ? C'est à dire se connecter à une instance, mais pouvoir lancer une requête qui fait appel à plusieurs bases présentes sur celle-ci
    Si tu utilises Sql Server tout à fait; tu peux même le faire avec des bases sur différents serveurs, à condition que les serveurs soient liés, même si ce n'est pas toujours optimal en terme de perf. (dans ce cas, chaque nom de base doit être préfixé par le nom du serveur; le nommage devient [Serveur].[Base].[Schema].[Table]). Il me semble y avoir quand même quelques limitations sur les vues indexées (de mémoire, à vérifier).

    Attention : il faut bien entendu que ta connexion ait les privilèges d'accès aux différentes bases.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 71
    Par défaut
    Bonjour, merci pour la réponse, mais cela veut donc dire que dans la chaine de connexion, on ne spécifie pas de database ?

    Genre au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBConn.ConnectionString = "Persist Security Info=False;Integrated Security=SSPI;database=" & NomBase & ";server=" & ServeurBase
    On met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBConn.ConnectionString = "Persist Security Info=False;Integrated Security=SSPI;server=" & ServeurBase

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par nico1492 Voir le message
    Bonjour, merci pour la réponse, mais cela veut donc dire que dans la chaine de connexion, on ne spécifie pas de database ?
    Tout à fait.
    Ceci dit tu peux en spécifier une, ce n'est pas génant.
    Ce qui est important ce sont les privilèges associés à la connexion : dans ton cas, avec Integrated Security, il faut que ton utilisateur Windows soit autorisé sur les deux bases.

  5. #5
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 467
    Par défaut
    Et pour te simplifier un peu le nom des objets tu peux faire comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT 
    UneTable.*, UneAutreTable.*
    FROM
    MABASE1..MaTable as UneTable
    INNER JOIN MABASE2..MaTableAutre as UneAutreTable ON UneTable.cle = UneAutreTable.cle
    Fonctionne impec sur un serveur SQL.

    Faut juste penser à bien donner les autorisations de "select", mais ça a déjà été dit

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    il est possible de ne pas spécifier de base de données dans une chaine de connexion sql server, mais chaque utilisateur sql server a une base de données par défaut
    par défaut cette base est master, mais on peut la modifier, auquel cas même sans spécifier le nom de la base ca peut tomber dessus directement via le paramétrage dans sql server

    quand on ne spécifie rien devant un nom de table, il cherche la table sur la base de données courant avec le schéma courant/par_défaut de l'utilisateur connecté
    si la table n'existe pas ou n'est pas accessible ca plante
    spécifier base.dbo.table permet de spécifier qu'on va sur telle base, avec tel schéma indépendamment de la connexion actuelle et de la base actuelle


    NB : on peut aussi changer de base comme on le fait dans studio management sans ré établir une connexion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    moncmd.commandtext = "USE autrebase"
    moncmd.executenonquery
    moncmd.commandtext = "select ...."
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. [MySQL] Requête SQL multi-base
    Par Kentin64 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/07/2012, 15h57
  2. Requête SQL multi schémas
    Par Monfy29 dans le forum SQL
    Réponses: 4
    Dernier message: 15/08/2008, 13h06
  3. [Debutant] Requête SQL Multi-Tables
    Par Superbretzel dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/02/2008, 11h47
  4. requêtes SQL sur base MySQL
    Par khaled_dev dans le forum Requêtes
    Réponses: 1
    Dernier message: 16/01/2008, 21h27
  5. [Requête SQL] Accès base de données à copier
    Par Zartak dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 04/05/2007, 11h52

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