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 :

[transact SQL] probleme d'update d'une table


Sujet :

MS SQL Server

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [transact SQL] probleme d'update d'une table
    Bonjour j'utilise trasact SQL pour synchroniser 2 bases, une en SQL server et l'autre sous mysql
    J'ai crée une procedure qui update une valeur de type var char dans sql serveur dans une colonne de type varchar dans une colonne mysql.
    Malheureusement, lorsque j'excute la procedure, j'obtiens l'erreur suivante :
    ligne 1 : syntaxe incorrecte vers 'Horizontale'
    La ligne incriminée dans sql serveur est la suivante :
    "Etui Horizontal noir pince + passant Taille Small (5200/5610...)"

    La procedure stocké est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    CREATE PROCEDURE Syncro_designation AS
    SET NOCOUNT ON
    BEGIN 
    	DECLARE @IdProduit INTEGER
    	DECLARE @Designation  VARCHAR(100)
    	DECLARE @command VARCHAR(1000)
    	DECLARE FOURNISSEURS CURSOR FOR 
    		select id_produit,AR_Design AS Designation from OPENQUERY(web,'select id_produit,sage_ref1, sage_ref2 from produit'),F_ARTICLE where (sage_ref1=AR_Ref) AND (dateDiff(hh,AR_DateModif,getdate())<48 ) AND (AR_sommeil <>1) AND id_produit=3648
     
    	OPEN FOURNISSEURS
    	FETCH NEXT FROM FOURNISSEURS INTO @IdProduit,@Designation
    	WHILE @@FETCH_STATUS = 0
    	BEGIN
     
                SET @command='update OPENQUERY(web,"select * from produit")  set description=' + @Designation   + '  where id_produit=' + CAST(@IdProduit as VARCHAR(10))
    		EXEC (@command) 
               	FETCH NEXT FROM FOURNISSEURS INTO @IdProduit,@Designation
    	END
    	CLOSE FOURNISSEURS
    	DEALLOCATE FOURNISSEURS
    END
    GO
    Bizarement lorsque je change la variable @designation par le texte :
    "Etui Horizontal noir pince + passant Taille Small (5200/5610...)"
    cela marche parfaitement
    Aurais je oublié qq chose?
    Merci encore pour votre aide et longue à ce merveilleux site.
    Alex

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

    Pour vous aider à débugger du code SQL dynamique, ajoutez une commande PRINT @command avant la commande EXEC (@command) : cela vous permettra de voir la commande qui va être exécutée .

    Votre requête a cependant plusieurs défaut :

    - C'est dommage de disposer d'un serveur lié et d'utiliser un curseur, qui est lent, vieux, moche et gourmand en ressources. Vous pouvez lire l'article de SQLPro à ce sujet.

    - Pourquoi n'écrivez-vous pas une procédure stockée dans votre base MySQL que vous appelleriez depuis votre base de données SQL Server, en lui passant quelques paramètres ?
    Imaginez les allez-retours que votre requête induit entre les deux serveurs, et l'effet que cela peut avoir sur les performances, même avec la requête suivante, qui a le même effet que votre requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DECLARE @now DATETIME SET @now = GETDATE()
     
    UPDATE web.maBD.monSchema.maTable
    SET description = SUB.AR_Design
    FROM web.maBD.monSchema.maTable SUP
    JOIN web.maBD.monSchema.maTable SUB ON SUB.IDProduit = SUP.IDProduit
    WHERE SUB.sage_ref1 = SUB.AR_Ref
    AND DATEDIFF(day, SUB.AR_DateModif, @now) < 2
    AND SUB.AR_sommeil <> 1
    AND SUB.ID_produit = 3648
    Vous faites contrôler à SQL Server des données qui sont dans une base de données MySQL.

    @++

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup, ca va me permettre de continuer à travailler sur les procedures stockées.
    Alex

Discussions similaires

  1. [trigger]Probleme d'update sur une table
    Par AlternantOracle dans le forum PL/SQL
    Réponses: 5
    Dernier message: 25/02/2010, 15h11
  2. Probleme d'update d'une table dans un DataGridView vers une bd
    Par Faladin dans le forum Windows Forms
    Réponses: 3
    Dernier message: 22/05/2008, 20h12
  3. [SQL] Probleme de requete sur une même table
    Par LP-mpascolo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/01/2008, 14h02
  4. Problème d'update d'une table sql en vb6
    Par cfelicien dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 30/08/2007, 20h24
  5. SQL Update d'une table à partir d'une autre table
    Par Jean-Marc68 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 16/03/2007, 13h22

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