2010-07-16 8 views
1

J'utilise MS SQL Server 2005. Lorsque je sélectionne un ensemble de lignes de la table avec la condition where appropriée, il renvoie la valeur 31. La même valeur de sélection si je mets à jour à un autre table, il est mise à jour en 30. J'utilisé la mise à jour de SQL comme suitSQL 2005 mise à jour - nombre de comptes question

update tablename 
set column1 = (Select column2 from tablename 
       where month(field1) = 05 and year(field1) = 2010) 
where field 2 = 'xxx' 

Si je la seule sélection exercerai intérieure, elle retourne une valeur colonne2 que 31. une fois la mise à jour exécutée et sélectionnez la table mise à jour, il montre comme 30.

Seulement 1 différence de nombre pour beaucoup de rangs ...

Quelqu'un pourrait-il faire face à ce problème ...

+0

Cela semble étrange. Pourriez-vous afficher les parties pertinentes de vos définitions de table et les données pertinentes? –

Répondre

0

Sans la définition de la table, ce sera très difficile, mais la première chose à vérifier s'il y a des déclencheurs sur la table qui changent la valeur. La deuxième chose est de commencer le débogage, ce qui signifie briser votre code jusqu'à:

declare @column2 as int 

Select @column2 = column2 from tablename where month(field1) = 05 and year(field1) =2010 

--Check whether @column2 is equal to 31. 
select @column2 

update tablename 
set column1 = @column2 
where field 2 = 'xxx' 

--Check whether column1 in tablename is equal to 31 
select column1 
from tablename 
where field 2 = 'xxx' 

Je suppose que le problème est que vous mêlé quelques-uns des noms de colonnes, vous avez utilisé « colonne1 », « colonne2 », « field1 'et' champ 2 'tous d'une table.

1

Je passe par les messages marqués sans réponse depuis que j'ai rejoint ce site impressionnant ... je ne sais pas si c'est la bonne approche pour les posts plus anciens, mais jusqu'à ce que quelqu'un me dise d'arrêter je suppose que je continuerai lol.

Alors, voici ce que je vois cette question:

Si vous savez que vous pouvez sélectionner le jeu total record, alors vous pouvez immédiatement passer à ce que vous essayez de faire avec elle au-delà de la commande SELECT.

Je note que vous n'essayez pas d'INSERT le résultat, mais c'est une mise à jour. Puisque vous mettez à jour les lignes existantes, et puisque votre seule clause est votre champ WHERE 2 = 'xxx', alors vous pouvez être sûr que vous avez une ligne qui ne correspond pas à votre WHERE. Cela ressemble à un simple problème d'intégrité des données pour cette ligne.

Pour rechercher la ligne incriminée, effectuez une requête sur votre table en tant que NOT IN ou <> en fonction du type de données.

Questions connexes