服务器是Win2003英文版(但是国家语言等都设置成中国),用SQL2000
有一个员工资料库表HR_1(里面是所有员工的资料),如果用select * from hr_1查看,显示的记录都是自动按照员工号(工号是字符类型Varchar的)从小到大排序的:
(DCNO 是字段名 varchar类型,代表工号   NAME是名字,  DEPT是部门编号): DCNO  NAME   DEPT
 10001 张三   HR,
 10002 李四,
 20001,
 30001,
...
 70001        FB,
 70002        FB,
...
 90009另外有一个考勤表KQ_1,其实也是每个员工一条记录,只是记录了每个员工的考勤信息,如果用select查看,也是自动按照工号排序的:
(EMPLOYEE 是这个表里的工号字段,varchar类新)EMPLOYEE  NAME   
 10001    张三   ,
 20001    李四   ,
 20002,     
 30001,
...
 70001,
 70002,
...
 90009但是我用了一个语句查询餐饮部的员工的考勤记录(部门代号是‘FB’):
SELECT * FROM KQ_1 WHERE EMPLOYEE IN (SELECT DCNO FROM HR_1 WHERE DEPT='FB') 
结果显示的界面上,数据都对,但是70007开头到70010的员工排在了最前面,把70001开头的员工都挤下去了:
70007,
70008,
70009,
70010,
70001,
70002,
70003更加怪的是:我把这个数据库原封不动的备份出来,放到我的笔记本上(XP中文版本,SQL2000)里,运行的结果是正常的:
70001,
70002,
70003
...
70007,
70008,
70009
我也查过服务器上这两个表的排序规则,都是Chinese-PRC,
所以头都晕了,只好请教各位高手,请大家指点一下,谢谢

解决方案 »

  1.   

    因为真正操作是在一个程序里运行这句话,那个程序里是规定不能放order by的,而且之前都没有这样的情况发生, 而且在我的本子上就是好的,所以非常不理解为什么同样的数据库会出现这样的问题
      

  2.   

    就象小菜说的 物理存储顺序是靠不住的,很可能你维护完索引,重设填充因子,dbcc checkdb等操作是随时变的.不加排序是不能保证你的顺序的.