日期:2014-05-18  浏览次数:20552 次

一下遇到了2个问题
各位大虾,今天我遇到了两个问题,麻烦大家看一下。
1.
delete b1 insert into b1 select b2 from b2 

select * from b1

上面的命令执行一次后,b2.b2导入了b1.b1,顺序也是一样的,可是紧接着再运行一次,b2.b2也导入了b1.b1,但是顺序变了,这是怎么回事呀.

2.
b3表有两个字段:bm,bn,其中bm的值为null,我想把b2.b2导入b3.bm,并且从第一行开始把null替换掉(表b2的记录行数和表b3的记录行数相同),我用

insert into b3 (bm) select b2 from b2 

记录是导进去了,可是却是接着null导入的,没从bm的第一行开始替换null,如何才能实现呢?请大虾们帮帮忙,先谢谢!!

------解决方案--------------------
第一个问题,不加排序的SELECT是乱序输出,会随着物理文件中行存放的顺序改变而改变,没有聚集索引的表输出顺序也不固定。想每次都一样,最简单的办法就是在b1上加聚集索引。
第二个问题
SQL code
UPDATE T1 SET T1.BM=T2.B2
FROM (SELECT *,ROW_NUMBER() OVER(ORDER BY GETDATE()) AS NUM FROM B3) T1
INNER JOIN (SELECT B2,ROW_NUMBER() OVER(ORDER BY GETDATE()) FROM B2) T2 ON T1.NUM=T2.NUM