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 :

Problème avec la fonction REPLACE


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Août 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Août 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Problème avec la fonction REPLACE
    Bonjour,

    Je suis en train de coder un trigger qui doit entre autres se déclencher après insertion en remplaçant certains mots par d'autres dans une colonne.
    Pour cela j'utilise un curseur qui charge chaque ligne de la colonne dans une variable @Adr qui est une chaîne de caractères ( varchar(100) ).
    Ce que j'ai codé comme suit : replace(@Adr, 'chaîne1' , 'chaine2').
    Le problème c'est que le compilateur dit qu'il y a une erreur au niveau du replace, et je n'ai aucune idée d'où ça peut venir !
    Quelqu'un pourrait-il bien m'aider ??

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Hanshorcan Voir le message
    Le problème c'est que le compilateur dit qu'il y a une erreur au niveau du replace, et je n'ai aucune idée d'où ça peut venir !
    Ça pourrait aider si on avait au moins l'erreur en entier...
    Parce que là, il reste juste l'option boule de cristal !
    Le code in extenso et la version de bd, ça serait vraiment cool...

  3. #3
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Août 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Août 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Ça pourrait aider si on avait au moins l'erreur en entier...
    Parce que là, il reste juste l'option boule de cristal !
    Le code in extenso et la version de bd, ça serait vraiment cool...
    Oui d'accord désolé !
    Voici mon code :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    CREATE TRIGGER CORRECTOR2
    ON BaseClients.dbo.Feuil1$
    FOR UPDATE, INSERT
     
    AS
     
    -- Déclaration Curseur d'adresses
    DECLARE CurInsBis CURSOR
    FOR SELECT POLICE, ADRESSE
    FROM Feuil1$
    WHERE ADRESSE IS NOT NULL
    IF @@ERROR <> 0 GOTO LBL_ERROR
     
    -- Variables de travail
    DECLARE @Adr varchar(211), @Pol varchar(55)
     
    OPEN CurInsBis
    IF @@ERROR <> 0 GOTO LBL_ERROR
    WHILE @@FETCH_STATUS = 0
    BEGIN
    	IF @Adr = ' '
    	BEGIN
    		FETCH CurInsBis INTO @Pol, @Adr
    		CONTINUE
    	END
     
    	REPLACE(@Adr, 'BMO', 'BORJ MOULAY OMAR')
     
     
    	-- Mise à jour de la table
    	UPDATE BaseClients.dbo.Feuil1$
    	SET ADRESSE = @Adr 
    	WHERE POLICE = @Pol
    	IF @@ERROR <> 0 GOTO LBL_ERROR
    	FETCH CurInsBis INTO @Pol, @Adr
    END
     
    -- Fermeture, libération ressources et gestion des erreurs
    CLOSE CurInsBis
    DEALLOCATE CurInsBis
    RETURN
    Je travaille sous MS SQL Server Express 2008 R2.
    Merci de votre aide

  4. #4
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Août 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Août 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    PS : le message d'erreur :

    Msg*102, Niveau*15, État*1, Procédure*CORRECTOR2, Ligne*27
    Syntaxe incorrecte vers 'REPLACE'.
    Msg*102, Niveau*15, État*1, Procédure*CORRECTOR2, Ligne*41
    Syntaxe incorrecte vers 'RETURN'.

  5. #5
    Invité
    Invité(e)
    Par défaut
    ok, je comprend mieux.
    Déjà, quand on est perdu, il est toujours bon d'aller faire un tour dans les sources, à savoir MSDN !
    Tu verras dans l'article sur les triggers que le RETURN n'en fait pas parti !!!
    http://msdn.microsoft.com/fr-fr/library/ms189799.aspx

    Il faudrait peut-être créer où va le GOTO LBL_ERROR...
    D'ailleurs c'est largement dispensable cette partie...

    Pour le REPLACE, c'est une fonction !!!
    http://msdn.microsoft.com/fr-fr/library/ms186862.aspx
    Donc elle renvoie une valeur qu'il faut gérer donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set @Adr = REPLACE(@Adr, 'BMO', 'BORJ MOULAY OMAR')
    Pour conclure, virer cet infâme curseur, vous pouvez faire ça en une seule commande.

  6. #6
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Août 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Août 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci pour ton aide
    Je suis complètement passé a côté !
    Le problème est résolu

  7. #7
    Invité
    Invité(e)
    Par défaut
    Votre procédure pourrait s'écrire plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TRIGGER CORRECTOR2
    ON BaseClients.dbo.Feuil1$
    FOR UPDATE, INSERT
    AS
     
    UPDATE BaseClients.dbo.Feuil1$
    SET ADRESSE = REPLACE(ADRESSE, 'BMO', 'BORJ MOULAY OMAR')
    WHERE ADRESSE IS NOT NULL
    GO
    Si j'ai bien compris votre tigger va faire ça sur tous les enregistrements à chaque fois alors que vous ne devriez le faire que ceux qui ont été modifiés ou ajoutés.
    Pour cela, regardez pour faire une jointure avec la table inserted :
    http://msdn.microsoft.com/fr-fr/library/ms191300.aspx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TRIGGER CORRECTOR2
    ON BaseClients.dbo.Feuil1$
    FOR UPDATE, INSERT
    AS
    	UPDATE BDF1
    	SET ADRESSE = REPLACE(ADRESSE, 'BMO', 'BORJ MOULAY OMAR')
    	FROM BaseClients.dbo.Feuil1$ AS BDF1
    	INNER JOIN INSERTED AS INS
    		ON INS.POLICE = BDF1.POLICE
    	WHERE ADRESSE IS NOT NULL
    GO
    Ça devrait revenir à ça, sous réserver que Police soit la clef primaire de votre table...

    NOTE : Je n'ai pas testé, il y a peut-être quelques erreurs de syntaxes.

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

Discussions similaires

  1. Problèmes avec les fonctions et replace
    Par Tommyl dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 01/12/2006, 21h34
  2. Problème avec la fonction findfirst ()
    Par Angelico dans le forum Windows
    Réponses: 3
    Dernier message: 05/08/2004, 20h40
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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