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 :

Mettre à jour des données à partir d'un autre serveur [2008R2]


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 5
    Par défaut Mettre à jour des données à partir d'un autre serveur
    Bonjour,

    Le titre n'est peut être pas très explicite. Mon objectif est de copier à l'aide d'une procédure stockée les données d'une table dans une autre table présente sur un autre serveur. J'utilise OPENDATASOURCE pour utiliser mon deuxième serveur.

    Le transfert des données d'une table à l'autre fonctionne correctement, je voudrais maintenant réussir à mettre à jour uniquement les lignes ajoutées depuis le dernier lancement de la procédure stockée. J'ai voulu faire ça avec un select imbriqué, mais ça ne fonctionne pas, aucune erreur mais les nouvelles lignes ne sont pas ajoutées dans la seconde table.

    Je fais un insert dans ma table 2 à partir d'un select dans ma table 1 si les données ne sont pas déjà présente dans la table 1 avec le NOT EXISTS. J'utilise la date pour ça car c'est le seul champs qui est unique sans compter l'ID.

    Voici un morceau du code pour vous aidez à comprendre. Ce code s’exécute sans problème mais je n'ai pas le résultat attendu. Merci de me donner des pistes ou de me proposer une autre solution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    INSERT serveur1.table1
        (
          ....
        )
        SELECT
           ....
            FROM OPENDATASOURCE('...','Data Source= ....; User ID= ....; Password= ...;').maTable2 AS maTable2
            WHERE NOT EXISTS (
                SELECT DISTINCT ...
                FROM OPENDATASOURCE('...','Data Source= ...; User ID= ...; Password= ...;').maTable2  AS maTable2, maTable1 AS maTable1
                WHERE  maTable.date = maTable2.date
            )

  2. #2
    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
    Par défaut
    Bonjour,

    Je ne comprend pas pourquoi vous rappelez votre table distante dans la sous requete.

    Ce serait plutôt quelque chose dans ce gout ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    INSERT serveur1.table1
        (
          ....
        )
        SELECT
           ....
            FROM OPENDATASOURCE('...','Data Source= ....; User ID= ....; Password= ...;').maTable2 AS maTable2
            WHERE NOT EXISTS (
                SELECT 1
                FROM serveur1.table1 AS maTable1
                WHERE  maTable1.date = maTable2.date
            )
    Une commande MERGE serait peut-être aussi appropriée...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 5
    Par défaut
    Merci pour votre réponse, en effet ça ne servait à rien, c'était le select 1 qui manquait, ça fonctionne maintenant.
    Je vais regarder du côté du merge, j'ai beaucoup de données à transférer et la procédure stockée est un peu longue à exécuter.

    Encore merci et bonne journée

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 5
    Par défaut
    J'ai essayé la solution avec MERGE, ça fonctionne également mais le temps d’exécution est plus long.
    20 sec contre 15 sec avec la première méthode.
    Connaissez vous un moyen d'optimiser ma procédure stockée pour réduire au maximum son temps d’exécution?

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/09/2007, 15h34
  2. [VBA-E] extraire des données à partir d'une autre feuille
    Par zzman dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/01/2007, 14h26
  3. Réponses: 5
    Dernier message: 12/12/2006, 17h24
  4. Mise à jour de données à partir d'une autre table
    Par rsc dans le forum Langage SQL
    Réponses: 7
    Dernier message: 05/04/2006, 11h53
  5. Réponses: 3
    Dernier message: 09/07/2004, 11h23

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