2010-11-28 6 views
2

H tout le monde je besoin d'une aide, je dois changer quelques ID de produit:Aide UPDATE requête dans SQL Server

SELECT * 
FROM user_item 
SET item_type='8063' 
WHERE item_type ='8051 

Ok ... facile, mais un problème

Parfois, je devra mettre à jour et ajouter + 1 élément. Et je ne sais vraiment pas quoi faire.

Exemple:

set item_type='962' And add 963 
where item_type='8077' 

quelqu'un ici peut me aider s'il vous plaît?

TKS

Répondre

1
UPDATE user_item 
SET item_type = 962 + 1 
WHERE item_type = '8077' 
+0

Les deux valeurs de l'instruction set sont arbitraires. Vous pouvez ajouter n'importe quel nombre à un autre pour cette expression. –

0
;with CTE as 
( select item_type, 
      case 
       when item_type = '962' then CONVERT(varchar(50), convert(int, item_type) + 963) 
       else CONVERT(varchar(50), convert(int, item_type) + 1) 
      end as new_item_type 
    from user_item) 
update CTE 
set  item_type = new_item_type 

Idéalement, vous devriez chercher le nouveau type d'élément dans une autre table ou par une autre règle plutôt que de faire une déclaration de cas grand, laid et fragile. Cet exemple fonctionne pour les informations que vous avez fournies dans la question. Expérimentez avec l'instruction SQL dans le CTE avant la mise à jour.

PS: Votre type de données vraiment un varchar? Si vous effectuez des opérations mathématiques sur les données, elles doivent certainement être des entiers. Vous obtiendrez de meilleures performances de recherche et d'indexation sur celles-ci et elles prendront moins de place que de les stocker en tant que varchar.

0

Si vous souhaitez ajouter un autre champ avec item_type = 963 (si j'ai bien compris), vous pouvez avoir une requête d'insertion relative supplémentaire pour le faire lorsque vous modifiez la valeur item_type de l'élément en question.