SQL 2005更新 - 计数数量问题

时间:2010-07-16 06:50:00

标签: sql sql-server-2005

我正在使用MS SQL Server 2005.当我从表中选择具有适当where条件的设置行时,它返回值为31.如果我更新到另一个表,它将更新为30,相同的选择值。使用SQL更新如下

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

如果我单独执行内部选择,它会将column2中的值返回为31.执行更新并从更新的表中选择后,它将显示为30.

许多行只有1个数字差异......

任何人都可以面对这个问题......

2 个答案:

答案 0 :(得分:1)

我正在浏览自加入这个令人敬畏的网站以来未标记的帖子...不确定这是否是旧帖子的正确方法,但直到有人告诉我停止我想我会继续大声笑。

所以这就是我对这个问题的看法:

如果你知道你可以选择总记录集,那么除了SELECT之外,你可以立即转到你想要做的事情。

我注意到你并没有试图插入结果,但它是一个更新。由于您要更新现有行,并且由于您的唯一子句是WHERE字段2 ='xxx',因此您可以确定有一行与您的WHERE不匹配。听起来像是该行的简单数据完整性问题。

要查找有问题的行,请对您的表进行查询,作为NOT IN或<>取决于数据类型。

答案 1 :(得分:0)

如果没有表定义,这将非常困难,但首先要检查表上是否有任何更改值的触发器。第二件事是开始调试,这意味着破坏你的代码:

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'

我猜测问题是你混淆了一些列名,你在一个表中使用了'column1','column2','field1'和'field 2'。