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 :

Définition de table serveur lié Access


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 915
    Par défaut Définition de table serveur lié Access
    Bonjour,

    Je vous expose le contexte.

    J'utilise une base de donnée Access connecté à mon serveur SQL par le biais d'un serveur lié.
    Afin d'amélioré les performance de mes requêtes je fais une copie des tables dont j'ai besoin de ma base Access vers une table SQL.
    Pour ce la j'utilise une syntaxe du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * INTO CopieSQLTable1  FROM Monserveurlie...Table1
    Tout fonctionne très bien, mais quand je fait cela je perd la définition des indexes de la table du serveur lié.
    Je sais que sous SQL on peux récupérer la définition de la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT definitionFROM Mabase.sys.sql_modules
    WHERE OBJECT_NAME(object_id) = 'MaTableSQL'
    Mais est-il possible de récupérer la définition de la table Access par le biais du serveur lié?
    Merci d'avance pour vos idées et votre aide.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    - Le Serveur lié ne fera pas plus que le Serveur auquel il est lié ! L'objet Serveur lié ne fait que émettre des demandes puis récupère des résultats fournis par le Serveur lié, en l'occurrence Access, si tenté que l'on puisse parler de "Serveur" pour Access !

    - Même si vous arrivez à récupérer la définition des indexes, il vous faudra recréer sous SQL Server, les indexes, et ce, en ayant recours au SQL Dynamique, etc.

    - Sous SQL Server les indexes sont des structures physiques, il ne s'agit pas uniquement de définitions ! Les différences entres Access et SQL Server se mesurent en années lumières ; un année lumière étant la distance parcourue par la lumière pendant la durée d'une année calendaire !

    - Une solution plus simple pour vous, serait de procéder comme suit :
    1 - Droper si elle existe la table CopieSQLTable1
    2 - Créer et remplir, comme vous le faites déjà, la table CopieSQLTable1 :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT * INTO CopieSQLTable1 FROM Monserveurlie...Table1
    3 - Créer sous SQL Server la clé primaire et autres indexes appropriés (CLUSTERED ou NONCLUSTERED )
    Exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ALTER TABLE dbo.CopieSQLTable1 ADD CONSTRAINT PK_CopieSQLTable1 PRIMARY KEY CLUSTERED (Col1 ASC, ... ) ; 
    GO 
    CREATE NONCLUSTERED INDEX IX_CopieSQLTable1_Col4_Col5.. ON dbo.CopieSQLTable1 (Col4, Col5 ...);
    GO 
    Etc..
    4 - Vous pouvez ensuite, regrouper ces traitements dans une procédure stockée puis programmer une tâche planifiée SQL Server qui exécute cette procédure à intervalle régulier (par exemple une fois par jour) pour actualiser automatiquement la table CopieSQLTable1 depuis la ou les sources de données Access (en l'occurrence Table1 sous Access).

    Remarque : Un autre solution beaucoup plus optimale consiste à :
    1 - Créer la table et les indexes une fois pour toute
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE Table CopieSQLTable1 ( Col1 ..., Col2, ... ) 
    GO 
    ALTER TABLE dbo.CopieSQLTable1 ADD CONSTRAINT PK_CopieSQLTable1 PRIMARY KEY CLUSTERED (Col1 ASC, ... ) ; 
    GO 
    CREATE NONCLUSTERED INDEX IX_CopieSQLTable1_Col4_Col5.. ON dbo.CopieSQLTable1 (Col4, Col5 ...);
    GO 
    Etc.
    2 - Initialiser différemment la table CopieSQLTable1 par
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO CopieSQLTable1 (Col1, Col2, ... ) 
    SELECT Clo1, Col2 
    FROM Monserveurlie...Table1
    3 - Faire un MERGE de la table CopieSQLTable1 ( INSERT, UPDATE, DELETE) depuis la sources Table1 sous Access
    4 - Encapsuler tout cela dans une une procédure stockée puis programmer une tâche planifiée qui s'exécute cette procédure à intervalle régulier.

    A+

  3. #3
    Membre Expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 915
    Par défaut
    Bonjour,
    Et merci d'avoir pris le temps d'étudier mon problème (au passage merci aussi pour l'explication sur les années lumières ).
    Je veux justement utiliser la puissance de SQL Server, par contre on est pas toujours maître des outils et des fichiers avec lesquels on travail, c'est pour cela qu'il faut s'adapté.
    Ceci étant dis, Je récupère la structure de ma table sous Access, mais pas les indexes, ni les clés primaire, et une table sans indexes n'est pas très optimisée.
    Ensuite le but n'est pas dé créer les indexes manuellement sinon pour ça je n'ai pas de problème.

    merci quand même pour les idées.

  4. #4
    Membre Expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 915
    Par défaut
    Bonjour,
    n'ayant pas beaucoup de prépositions je vais donc me retourner vers une table contenant mes descriptions d'index.
    Ce n'est pas très propre mais c'est une solution qui fonctionne.
    je suis toujours preneur si vous avez des suggestions.

Discussions similaires

  1. [AC-2010] tables liées entre access et sql serveur express
    Par etienne8 dans le forum VBA Access
    Réponses: 10
    Dernier message: 10/02/2012, 20h27
  2. serveur IIS + access => base vérouillée
    Par Invité dans le forum Access
    Réponses: 4
    Dernier message: 11/10/2005, 09h25
  3. Affichage des tables temporaires d'Access avec GetTableNames
    Par Oluha dans le forum Bases de données
    Réponses: 2
    Dernier message: 25/05/2005, 16h23
  4. Pb Procedure Stockée sous SQL SERVEUR et ACCESS
    Par alexcluzel dans le forum MS SQL Server
    Réponses: 24
    Dernier message: 30/07/2004, 16h31

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