2010-12-18 3 views
0

Si j'ai une table MyTable avec les colonnes a, b et c, qui sont ints. Étant donné que je veux mettre à jour tous les 'a basé sur les valeurs de b et c.mise à jour d'une table dans tsql avec plusieurs conditions

Update MyTable set a = 2 where b = 1 and c = 1 

Il est beaucoup trop tard, et je ne peux pas pour la vie de me voir pourquoi cette déclaration ne fonctionne pas, que je manque quelque chose de stupide?

Modifier, woops, a oublié l'erreur.

"sous-requête amène à plus de 1 valeur. Ce n'est pas autorisée lorsque la sous-requête suit =! =, <, < =,>,> = ou lorsque la sous-requête est utilisé comme une expression." Edit2: C'était la requête exacte que j'utilisais (différents noms de colonne). Il s'avère qu'il y avait un déclencheur sur la table qui était cassé. Je me sens un peu stupide maintenant, mais merci pour l'aide de toute façon :)

+0

Pouvez-vous décrire pourquoi cela ne fonctionne pas? Erreur, rien mis à jour, etc. – sgriffinusa

+0

Cela devrait fonctionner. Je ne vois pas pourquoi cela ne serait pas –

+2

Votre erreur ne correspond pas à votre code. Si possible, vous devez publier la requête sql exacte. – sgriffinusa

Répondre

3

Il n'y a rien de mal à la déclaration que vous avez posté. L'erreur est ailleurs.

Pourriez-vous avoir publié la mauvaise requête? Ou peut-être que vous l'avez trop simplifié? Un sous-requête ressemble à ceci:

UPDATE MyTable 
SET a = 2 
WHERE b = 1 AND c = (SELECT c FROM MyTable2 WHERE id = 5) 
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <--- subquery 

Une requête non valide qui pourrait donner le message d'erreur que vous obtenez pourrait ressembler à ceci:

UPDATE MyTable 
SET a = 2 
WHERE b = 1 AND c = (SELECT c, d FROM MyTable2 WHERE id = 5) 

La deuxième requête est invalide car elle retourne deux valeurs, mais le = L'opérateur permet seulement la comparaison à une seule valeur.

La solution consiste à s'assurer que toutes les sous-requêtes utilisées dans les comparaisons d'égalité ne renvoient qu'une seule ligne constituée d'une seule colonne.

Questions connexes