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

MS SQL Server Discussion :

Openquery - Serveur Lié SQLServer-MySQL


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Par défaut Openquery - Serveur Lié SQLServer-MySQL
    Bonjour,

    je viens ici demander vos lumières car je suis confronté à petit problème.

    J'ai relié un serveur MySQL à un SQLServer 2005.
    J'ai voulu utiliser des Triggers pour que si ma table a des éléments ajoutés/mis à jour/effacés, cela soit automatiquement appliqué à la table correspondante Mysql.
    Mais cela ne marche pas, et d'après SQLPro (si j'ai bien lu ses messages) ce n'est pas possible car ODBC ne supporte pas le T-SQL (corrigez moi si je me trompe).

    Du coup, j'essaye de contourner le problème à l'aide d'une procédure stockée, à laquelle je ferai appel une fois par jour via l'Agent SQL Server.

    Donc j'ai créé une procédure. Qui semble marcher car la base se remplit... mais à chaque fois cela ne fait qu'ajouter des éléments à la base, à chaque appel de la procédure.
    Du coup pour ne pas trop compliquer la chose, je pensais vider la table d'abord via une procédure stockée, et ensuite la remplir.

    Seulement cela ne marche pas, j'ai le message d'erreur suivant :

    Le fournisseur OLE DB "MSDASQL" du serveur lié "Linked_Mysql" a retourné le message "Informations sur la colonne clé insuffisantes ou incorrectes. Trop de lignes sont affectées par la mise à jour.".
    Et voilà en gros ma procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    USE [Base]
    SET QUOTED_IDENTIFIER ON
    GO
    as
    DELETE from OPENQUERY(Linked_Mysql, 'Select * from affaires where afNumero is not Null');
    Donc est ce possible de supprimer l'intégralité de ma table dans MySQL depuis SQLServer ou j'aurai toujours le message "Trop de lignes sont affectées par la mise à jour" ? Sachant que je remarque qu'il y a bien des lignes effacées dans la base MySQL mais seulement 2.

    Merci par avance, et j'espère avoir été assez clair!

  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 : 43
    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,

    Effectivement ce comportement est bizarre, mais je vais laisser les lumières de SQLPro vous éclairer car je ne connais pas du tout MySQL.

    Vous pouvez néanmoins écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    USE [Base]
    GO
     
    DELETE FROM Linked_Mysql.affaires
    WHERE afNumero IS NOT NULL
    @++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Par défaut
    Merci pour la réponse et oui en effet c'est assez étrange!

    Par contre le code que vous me donnez ne marche pas, cela me retourne

    Msg 208, Niveau 16, Etat 1, Procédure EssaiDelete, Ligne 3
    Nom d'objet 'Linked_Mysql' non valide

    (1 ligne(s) affectée(s))
    'Linked_Mysql' est le nom de mon serveur lié, donc normalement je suis obligé d'utiliser OPENQUERY pour interagir avec non ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Par défaut
    Ah j'ai réussis en changeant ma procédure ainsi :


    USE [BASE]
    GO

    SET ANSI_NULLS_ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE PROCEDURE EssaiDelete
    AS
    DELETE FROM OPENQUERY (Linked_Mysql, 'Select * from affaires')
    WHERE afNumero IS NOT NULL
    Et là ça marche... ma commande ne devait pas être bonne précédemment (je mettais le where dans la commande Openquery, cela devait peut être jouer)

    Edit: je me suis peut être un peu avancé, j'ai encore des messages d'erreurs (notamment si j'ai plusieurs fois la même entrée dans afNumero)

    Le fournisseur OLE DB "MSDASQL" du serveur lié "Linked_Mysql" a retourné le message "Informations sur la colonne clé insuffisantes ou incorrectes. Trop de lignes sont affectées par la mise à jour.".
    Msg*7345, Niveau*16, État*1, Procédure*EssaiExportbis, Ligne*3
    Le fournisseur OLE DB "MSDASQL" du serveur lié "Linked_Mysql" n'a pas pu effectuer la suppression dans la table "Select * from affaires where afNumero is not Null". La mise à jour ne correspond pas aux spécifications du schéma.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Par défaut
    Donc ma solution est au final...

    - éviter les doublons (sinon ça ne marche plus)
    - créer deux procédures stockées (une pour effacer les données dans la table, l'autre pour les importer)
    - faire un appel à chaque procédure l'une après l'autre

    Et ainsi cela semble marcher comme je le veux, après si SQLPro ou quelqu'un a une idée de pourquoi cela ne marche pas quand il y a plusieurs fois la même entrée dans un champ, et éventuellement, de comment contourner le problème, je suis curieux d'en savoir plus.

    Merci bien en tout cas.

  6. #6
    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 : 43
    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
    Peut-être que les options de votre serveur lié ne sont pas correctement configurées.
    Pouvez-vous scripter le serveur lié et poster celui-ci ?

    @++

Discussions similaires

  1. Serveur Embarqué Java - MySql
    Par raphielda dans le forum JDBC
    Réponses: 1
    Dernier message: 25/09/2007, 11h22
  2. Logiciel libre de sqlserver à mysql
    Par bidule123456 dans le forum Installation
    Réponses: 5
    Dernier message: 29/08/2007, 12h04
  3. Lien entre serveur Tomcat et MySQL
    Par artaud1 dans le forum JDBC
    Réponses: 1
    Dernier message: 29/06/2007, 06h42
  4. XP et serveur Apache/php/mysql
    Par licorne dans le forum Windows XP
    Réponses: 2
    Dernier message: 17/11/2005, 20h11
  5. Réponses: 1
    Dernier message: 07/10/2005, 09h24

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