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 :

Fonction Replace SQL Server 2008


Sujet :

Développement SQL Server

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Par défaut Fonction Replace SQL Server 2008
    Bonjour à tous ,

    J'imagine que la question s'est déjà posée mais je n'ai trouvé aucune réponse :

    Dans une table contenant deux champs (ID et Mémo) je souhaite remplacer les " par des '

    J'utilise donc la fonction REPLACE de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE dbo.p_ritdscmem SET Memo = REPLACE(Memo, '"', '''') WHERE RitInCde = '59452';;
    Le Memo dans la fonction Replace est le nom du champ.

    Erreur retournée : Le type de données de l'argument text n'est pas valide pour l'argument 1 de la fonction replace.

    N'est-il pas possible de faire un REPLACE sur un champ donné ?!

    Merci de votre aide.

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

    Ha ! la joie des quotes et des guillemets !
    Et encore là on n'est pas dans du code SQL dynamique

    J'ai triché : j'ai fait un test avec un SELECT suivi d'un PRINT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE	dbo.p_ritdscmem
    SET	Memo = REPLACE(Memo, '"', '''''') 
    WHERE	RitInCde = '59452';
    @++

  3. #3
    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,

    Quel est le type de la colonne Memo ?

    TEXT ?

    Ce type, en plus d'être déprécié, n'est pas compatible avec la fonction REPLACE, et peut être avantageusement remplacé par du [N]VARCHAR(MAX).

    Le mieux est donc de changer le type de la colonne si vous le pouvez.

    sinon il faudra ruser et transtyper à la volée :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE	dbo.p_ritdscmem
    SET	Memo = REPLACE(CAST(Memo AS VARCHAR(MAX)), '"', '''''') 
    WHERE	RitInCde = '59452';

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Par défaut
    En effet c'est du (text, NULL), merci pour l'information quant à la compatibilité de la fonction REPLACE avec le texte.

    Je vais testé cette solution et te tiens au courant. Merci

  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 : 44
    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
    Le mieux aurait été de convertir la colonne au type varchar(max) au préalable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE dbo.p_ritdscmem
    ALTER COLUMN Memo varchar(max)
    @++

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

Discussions similaires

  1. Fonction CONTAINS de SQL SERVER 2008
    Par DJIRE dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 04/06/2013, 17h34
  2. Réponses: 4
    Dernier message: 11/11/2010, 10h39
  3. Fonction ROUND dans sql server 2008
    Par aya02 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 07/06/2010, 16h55

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