近段时间做项目时碰到一个问题,差点载了个大跟斗。情况是这样子的:
源数据有31655条记录,在源数据中有一个从1排到31655的增1序号,由于我程序中排序是按降序输出,懒得改程序了,所以,就在导入数据前做一个增量为-1的列,种子为31655,按道理来说,应该没问题的吧,结果,生成后,没核对结果直接导入生产环境,出问题了排序的结果乱了。表结构大体如下:
s s_desc c1 c2......(其中,s为自增1的int类型,s_desc为自减1的int类型,种子为31655)
1  31655 A+ B
2  31654 A  A+
.   .    .  .
.   .    .  .
.   .    .  .对比一下结果就会发现,在s在1240左右的时候,s_desc突然就从跳到几百有谁能告诉我这是什么问题引起的?貌似int没超界吧,毕竟int有32bit呢,足够用了

解决方案 »

  1.   

    select 31656-s from tb order by s
    不就可以了,干嘛要个新的列
      

  2.   

    select (31656-s) as 新列 from tb order by s 
      

  3.   

    导入时加了order by了吗?所有记录的 s + s_desc 为同样的值吗?
      

  4.   

    select (31656-s) as 新列 from tb
    你出现错误的原因  估计重新在做一次就没问题了
      

  5.   

    的确是怪事create table j(
    id int,
    ids int
    )declare @i int,@j int
    set @i=1
    set @j=31655
    while @i<31655 and @j>1
    begin
    insert into j
    values(@i,@j)
    set @i=@i+1
    set @j=@j-1
    end在3625行的时候突然就跳成这样了
    3621        28035
    3622        28034
    3623        28033
    3624        28032
    25369       6287
    25370       6286
    25371       6285
    25372       6284
    怎么回事呢
    上面的语句写的有问题吗
    高手赐教
      

  6.   

    另外,你把前一列order by 后再看结果,也是一样的
      

  7.   

    我试了一下,用“select * from j”时得到的数据的确直接从3624 跳到了25369
    然后我用“select * from j where id = 3625”和“select count(*) from j”查询,
    发现有id为3625的数据,表中的总条数为31654
    可见:所有的循环都已经成功执行了插入操作。
    查询的情况的出现,可能和sqlserver中插入操作的优化,以及数据库的存储机制有关吧!