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 :

Comment faire un update entre deux tables de deux bases différentes ?


Sujet :

Développement SQL Server

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut Comment faire un update entre deux tables de deux bases différentes ?
    Bonjour,
    sous SQL 2000 :

    je voudrais faire un update entre 2 table CLT et REP01MAJ mais CLT est dans la base 1 INTEGR01 et REP01MAJ est dans la base MAJCODETARIF

    en cherchant sur le forum, j'ai trouvé cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE TABLE1 t1
    INNER JOIN TABLE2 t2 ON t1.id = t2.id
    SET t1.Niveau = t2.Niveau
    mais cela n'est que pour la même base de données.

    savez-vous comment faire ?
    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Utilisez des noms de tables qualifiés avec nomBase.schemaSQL.NomTable.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Merci pour la réponse.

    J'ai essayé de suivre le conseil et j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE BIJOU.dbo.TABLEDESTINATION
    INNER JOIN MAJCODETARIF.dbo.REP01_MAJ_CodeTarifsClients ON BIJOU.dbo.TABLEDESTINATION.BIJCLI = MAJCODETARIF.dbo.REP01_MAJ_CodeTarifsClients.MAJCLI
    SET BIJOU.dbo.TABLEDESTINATION.BIJTRF = MAJCODETARIF.dbo.REP01_MAJ_CodeTarifsClients.MAJTRF
    Mais j'ai une erreur :
    Serveur*: Msg 156, Niveau 15, État 1, Ligne 2
    Syntaxe incorrecte vers le mot clé 'INNER'.

    Savez-vous où je me trompe ?

    Merci pour votre aide

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    J'aurai plutôt fait quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE BIJOU.dbo.TABLEDESTINATION
    SET BIJOU.dbo.TABLEDESTINATION.BIJTRF = (select MAJCODETARIF.dbo.REP01_MAJ_CodeTarifsClients.MAJTRF from MAJCODETARIF.dbo.REP01_MAJ_CodeTarifsClients WHERE BIJOU.dbo.TABLEDESTINATION.BIJCLI = MAJCODETARIF.dbo.REP01_MAJ_CodeTarifsClients.MAJCLI)

  5. #5
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    En fait votre requête est syntaxiquement fausse parce que pour réaliser la mise à jour d'une table à l'aide d'une autre (peu importe si elles sont dans des bases de données différentes), il est nécessaire d'avoir la clause FROM.
    Celle-ci vous permet de spécifier une jointure.
    Il en va de même pour un DELETE à partir de deux tables.

    Vous pouvez simplement changer votre requête en écrivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE		BIJOU.dbo.TABLEDESTINATION
    SET		BIJTRF = TARIF.MAJTRF
    FROM		MAJCODETARIF.dbo.REP01_MAJ_CodeTarifsClients AS TARIF
    INNER JOIN	BIJOU.dbo.TABLEDESTINATION AS JEWEL
    			ON TARIF.MAJCLI = JEWEL.BIJCLI
    @++

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    d'abord merci à tous pour votre aide !

    J'ai appliqué la requête mais j'obtiens l'erreur :
    Impossible de résoudre le classement en conflit de l'opération equal to.
    J'ai testé sur une base d'essai avant, cela marche bien mais que je passe sur la vraie base, cela plante.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    J'ai trouvé.

    En cause : le calssement des 2 bases : l'une en French CI AS et l'autre en Latin1_General_Bin.

    J'ai mis les 2 à l'identique et j'ai dû aussi le faire sur chaque champs de ma table d'origine.

    MErci à tous

  8. #8
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Vous pouviez aussi utiliser la clause COLLATE sur le prédicat de jointure, mais ce que vous avez fait est de loin le plus propre

    @++

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

Discussions similaires

  1. Update entre 2 tables de 2 bases de données différentes
    Par Larentia dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/05/2015, 10h48
  2. Réponses: 0
    Dernier message: 16/04/2015, 16h11
  3. Réponses: 2
    Dernier message: 06/08/2014, 19h01
  4. Réponses: 4
    Dernier message: 29/12/2008, 09h04
  5. comment faire une query entre 2 tables de 2 bases?
    Par ch_cu2 dans le forum Débuter
    Réponses: 1
    Dernier message: 12/12/2006, 21h45

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