导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

非常的怪事,每次运行的结果都不一样

tongki 2007-12-19 10:34:18
这样的一条语句,返回的结果每次都不一样
select count(*) from #tem_jx_jxjl where bqqmwhbjje+bqqmwhlxje+yqlxye+wyjye=0

后来想,是不是字段定义的问题,看了一下,每个字段的定义都是一样的,decimal(18,2) not null default 0
为什么结果都不一样呢?

试过:
select count(*) from #tem_jx_jxjl where isnull(bqqmwhbjje,0)+isnull(bqqmwhlxje,0)+isnull(yqlxye,0)+isnull(wyjye,0)=0
select count(*) from #tem_jx_jxjl where isnull(bqqmwhbjje,0.00)+isnull(bqqmwhlxje,0.00)+isnull(yqlxye,0.00)+isnull(wyjye,0.00)=0.00

也一样,每次都差一条记录以上,我晕了。

运行环境:
CPU: Intel(R)on(R)CPU 2.40GHz
Memory: 768MB
OS: wondows2000
DB: Sqlserver2000(Service Pack 4)

[color=#FF0000]客户火了,我更晕了![/color]
...全文
131 点赞 收藏 17
写回复
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
tongki 2007-12-25
bqqmwhbjje 本期期末未还本金金额
bqqmwhlxje 本期期末未还本金金额
yqlxye 逾期利息余额
wyjye 违约金余额

哈哈,我不知道英文如何缩写这些东东
回复
tongki 2007-12-25
如果表mytable行数少的话,#tem_jx_jxjl表的id会按顺序排列的,但行数多了,id并不会按顺序排,而是不规则的,从小到大,从大到小,乱成一片!
-----------------------------------------------
呵呵,真会那样吗lz?


---------------------------------------------------
是这样,所以最后我在insert into语句后面加上“;”号,就OK了
回复
w2jc 2007-12-24
以上代码如果表mytable行数少的话,#tem_jx_jxjl表的id会按顺序排列的,但行数多了,id并不会按顺序排,而是不规则的,从小到大,从大到小,乱成一片!因些影响了我此后对#tem_jx_jxjl的update,所以bqqmwhbjje,bqqmwhlxje,yqlxye,wyjye的内容不一样
---------------------------------------------------
我一开始还觉得是不是因为由于四舍五入导致的误差,
原来是值不一样,晕...
另,LZ的这些字段名是在是很令人迷惑。
回复
frankxiong1983 2007-12-24
其实全拼音的字段还好记一点,我们是中国人嘛,支持中文!
回复
tongki 2007-12-22
问题找出来了。在生成#tem_jx_jxjl我是这样的:
create table #tem_jx_jxjl(
ID int IDENTITY (1, 1) NOT NULL ,
a int,
b int,
。。。
。。。
)

insert into #tem_jx_jxjl (a,b,...)
select a,b,... from mytable order by a,b

以上代码如果表mytable行数少的话,#tem_jx_jxjl表的id会按顺序排列的,但行数多了,id并不会按顺序排,而是不规则的,从小到大,从大到小,乱成一片!因些影响了我此后对#tem_jx_jxjl的update,所以bqqmwhbjje,bqqmwhlxje,yqlxye,wyjye的内容不一样。

不过,我还是得了长进了,以后凡事都要以实际结果进行严格调试才行,凭主观希望是不可靠的
回复
wzy_love_sly 2007-12-22
如果表mytable行数少的话,#tem_jx_jxjl表的id会按顺序排列的,但行数多了,id并不会按顺序排,而是不规则的,从小到大,从大到小,乱成一片!
-----------------------------------------------
呵呵,真会那样吗lz?
回复
tongki 2007-12-20
哎,核心部位出错啦,这回可要花起码一星期的时间了,惨哦。

在#tem_jx_jxjl表中,bqqmwhbjje,bqqmwhlxje,yqlxye,wyjye的内容不一样,那个上百行的一条UpDate语句,又要让我费心了。如果游标的速度快点,我也不要用这种方法了,郁闷!
回复
云中客 2007-12-20
是否需要在语句后增加Order by ?
回复
-狙击手- 2007-12-20
哎,核心部位出错啦,这回可要花起码一星期的时间了,惨哦。

在#tem_jx_jxjl表中,bqqmwhbjje,bqqmwhlxje,yqlxye,wyjye的内容不一样,那个上百行的一条UpDate语句,又要让我费心了。如果游标的速度快点,我也不要用这种方法了,郁闷!

------
呵呵,同一个过程同样的参数这几个列为什么 会不一样呀


回复
hui_hui_2007 2007-12-19
可能是 null 在作怪,请看下面代码


declare @a int,
@b int

set @a=1
set @b=null
select @a+@b

set @a=1
set @b=0
select @a+@b
回复
hui_hui_2007 2007-12-19
select count(*) from #tem_jx_jxjl where bqqmwhbjje+bqqmwhlxje+yqlxye+wyjye=0.00 (这一条却不一样)
--------------------
改成
select count(*) from #tem_jx_jxjl where isnull(bqqmwhbjje,0)+isnull(bqqmwhlxje,0)+isnull(yqlxye,0)+isnull(wyjye,0)=0.00
试试
回复
tongki 2007-12-19
select count(*) from #tem_jx_jxjl (这一条每次都一样)
select count(*) from #tem_jx_jxjl where bqqmwhbjje+bqqmwhlxje+yqlxye+wyjye=0.00 (这一条却不一样)
--------------------------------------------------------------------------------------------
不过,我真的还没有认真地看bqqmwhbjje,bqqmwhlxje,yqlxye,wyjye的内容是不是一样,因为存储过程每次都执行的参数都一样,所以认为应该没有变化。也许,要一行一行地去检查。有什么好的办法找出不同呢?用不同的临时表试试,我要先试试,临时表内容多了一点,检查好了再贴出来
回复
OracleRoob 2007-12-19
dbcc checkdb

回复
OracleRoob 2007-12-19
重新启动一下SQL Server。

或者把数据库备份后恢复到其他机器上试试。
回复
tongki 2007-12-19
谢谢,临时表的内容是一样的
我也每次统计临时表的行数,是一样的,不变
回复
OracleRoob 2007-12-19
首先确定每次执行时临时表中的数据是一样的。
回复
中国风 2007-12-19
楼主的临时表每次运行生成一次。。数据在变,结果会出现这样的情况
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告