2009-10-16 6 views
0

J'ai un énorme problème avec la fonction SQL REPLACE dans Microsoft SQL Server Management Studio Express.SQL Server Express: problème de remplacement dans SQL Server Mgmt Studio Express

Lorsque je suit requête

SELECT  REPLACE('ArticleNumber', 'S401', 'I0010') 
SELECT  REPLACE('ArticleNumber', 'S302', 'I0020') 
SELECT  REPLACE('ArticleNumber', 'S303', 'I0030')  
SELECT  REPLACE('ArticleNumber', 'S304', 'I0040')  
SELECT  REPLACE('ArticleNumber', 'S305', 'I0050')  
SELECT  REPLACE('ArticleNumber', 'S306', 'I0060')  
FROM  tbl.Products 

Ensuite Response Studio Express avec cette SELECT n'a pas été reconnu.

Qu'est-ce que je fais mal?

+0

Merci à tous d'être si utile, il semble que mon problème ne se résolu mais la question a été répondu correctement je l'ai rouverte une new Question l'expliquant d'une autre manière http://stackoverflow.com/questions/1629201/sql-replace-old-values-trough-new-ones – elhombre

Répondre

3

Selon ce que vous essayez de faire ...

Vous avez besoin soit un emboîtées REPLACE ...

SELECT 
    REPLACE 
      REPLACE 
       REPLACE 
        REPLACE 
         REPLACE 
           REPLACE(ArticleNumber, 'S401', 'I0010'), 
         'S302', 'I0020'), 
        'S303', 'I0030'), 
       'S304', 'I0040'), 
      'S305', 'I0050'), 
    'S306', 'I0060')  
FROM  tbl.Products 

..ou plusieurs colonnes de sortie

SELECT 
    REPLACE(ArticleNumber, 'S401', 'I0010'), 
    REPLACE(ArticleNumber, 'S302', 'I0020'), 
    REPLACE(ArticleNumber, 'S303', 'I0030'), 
    REPLACE(ArticleNumber, 'S304', 'I0040'),  
    REPLACE(ArticleNumber, 'S305', 'I0050'),  
    REPLACE(ArticleNumber, 'S306', 'I0060') 
FROM  tbl.Products 

Note: l'erreur provient du moteur de base de données qui essaie de l'exécuter. SSMS est un éditeur de texte glorifié avec quelques extras utiles ..

+0

Merci pour votre réponse détaillée, j'ai essayé le deuxième code dans votre message. Mais quand je laisse Studio Express exécuter le code, il va accrocher un "AS Expr" après chaque point d'exclamation fermé avec des numéros de comptage. La sortie que je reçois est un groupe de colonnes nommées "expr" avec des nombres comptant. Chaque colonne contient la même table d'origine qu'une seule valeur a été modifiée. quand je vais en vue normale, rien n'a été changé. Je veux juste que toutes les anciennes valeurs soient remplacées par de nouvelles. Avez-vous maintenant peut-être comment je peux atteindre ce résultat? – elhombre

1

peut-être que je ne reçois pas ce que vous essayez de faire mais de ce que je peux lire ici, vous essayez de remplacer 'S401' dans la chaîne 'NuméroArticle' par ' I0010' de sorte que le résultat de sélection sera toujours « numéro_article » .... et la

dE tbl.Products est inutile

si tu veux remplacer la valeur du numéro_article de champ de la table produtcts alors vous devriez essayer ArticleNumber sans citation jsut se référer à la réponse GBN pour la syntaxe exacte

3

Est-ce que articlenumber doit être entre guillemets? Votre remplacement ne va pas remplacer quoi que ce soit comme S401, S302, etc ... ne sont certainement pas dans 'ArticleNumber.'

Vous voudrez suivre les conseils de gbn d'utiliser une instruction imbriquée, mais avec la colonne réelle.

SELECT 
REPLACE(
     REPLACE(
      REPLACE(
       REPLACE(
        REPLACE(
          REPLACE(ArticleNumber, 'S401', 'I0010'), 
        'S302', 'I0020'), 
       'S303', 'I0030'), 
      'S304', 'I0040'), 
     'S305', 'I0050'), 
'S306', 'I0060') 
FROM tbl.Products 

Kris

+0

bon point, j'ai corrigé ma réponse – gbn

1

C'est une manière légèrement différente de le faire.

SELECT COALESCE(ch.New, pr.ArticleNumber) AS ArticleNumber 
FROM tbl.Products pr 
    LEFT JOIN (
    SELECT 'S401' AS Old, 'I0010' as New 
    UNION 
    SELECT 'S302' AS Old, 'I0020' AS New 
    UNION ... etc 
) ch ON ch.Old = pr.ArticleNumber 
+0

SUR CHARINDEX (ch.Old, pr.ArticleNumber)> 0? Puis ajoutez un DISTINCT? –

+0

@Peter J'ai peur que vous me perdiez avec cette suggestion. Quels problèmes résout-il? –

+0

Si le numéro d'article correspond à Q45-S401, REPLACE() renvoie Q45-I0010. CHARINDEX() dans le JOIN plus DISTINCT REPLACE() dans le SELECT renverrait également Q45-I0010. JOIN ... COALESCE renvoie la valeur d'origine, Q45-S401. –

1

Retirez les guillemets autour numéro_article et les nids REMPLACE:

SELECT 
    ArticleNumber = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(ArticleNumber 
    , 'S401', 'I0010')  
    , 'S302', 'I0020')  
    , 'S303', 'I0030')  
    , 'S304', 'I0040')  
    , 'S305', 'I0050')  
    , 'S306', 'I0060')  

FROM tbl.Products 
Questions connexes