2009-01-15 11 views
1

J'ai hérité d'une base de données très ancienne qui nécessite des données à mettre à jour. Chaque ligne a une colonne avec un UniqueID qui ressemble à C0042-45-39612. Les 3 derniers chiffres du code sont la catégorie Id (dans ce cas 612).Sql Server Ignorer les erreurs de mise à jour

que je dois faire une mise à jour qui vise seulement certaines catégories et j'utilise cette instruction SQL

UPDATE WebbikesProducts SET Price = Price * 1.05 WHERE Convert(Integer, SubString(UniqueID, 3, 3)) = 125 

Le problème évident est ici si le code unique n'a pas 3 chiffres à la fin? Eh bien, c'est exactement le problème que j'ai parce que pas tous les éléments sont catégorisés ou ont des numéros uniques comme C0049-307-1CHROME.

Je n'ai pas accès à la base de données (j'appelle ceci d'une page d'asp) ainsi je préférerais ne pas devoir créer une procédure stockée. Le DB est SQL 2000.

Y at-il un moyen d'ignorer les lignes avec des erreurs et continuer à mettre à jour les autres lignes?

Répondre

1

Essayez ceci:

UPDATE WebbikesProducts 
SET Price = Price * 1.05 
WHERE ISNUMERIC(SubString(UniqueID, 3, 3)) = 1 
AND Convert(Integer, SubString(UniqueID, 3, 3)) = 125 

ou encore plus simple:

UPDATE WebbikesProducts 
SET Price = Price * 1.05 
WHERE SubString(UniqueID, 3, 3) = '125' 

-Edo

1

Je ne sais pas pourquoi vous prenez la peine de convertir en int. Pourquoi ne pas faire une comparaison de chaînes pour les trois derniers chiffres. Aussi, vous faites - substring (id, 3, 3).

Je suppose que vous avez simplifié l'extrait ci-dessus pour le rendre plus facile à lire et que vous êtes déjà en train d'extraire le 39612 en premier?

Je suggère ce qui suit:

where UniqueID like '%612' 
Questions connexes