第一个是UPDATE的执行原理。
问题是这么来的:那天小爱问怎么把表中的两行某字段互换,如下:
COL1  COL2
1     A
2     B
变成
1    B
2    A
我就试着写了个更新,本来以为不会成功,结果却成功了本来我的理解是UPDATE逐行更新表中记录,当更新了第一行以后A就没了,但现在看来是理解错了,所以想请教UPDATE的执行原理,也可以单讲上面那个例子。第二个问题是不带排序的SELECT顺序,以前有人问题,但找不到那个帖子了,也不知道结果
SELECT * FROM TB
或者  UPDATE TB SET ....
这里不带排序,按高手的说法每次执行的顺序都可能不同,开始时应该会按插入的次序输出,我的问题是:都有哪些情况会导致SELECT的输出顺序改变?也就是说什么情况会使SELECT * FROM TB的输出顺序改变?说的可能有点啰嗦,也不知道说没说清楚,欢迎大家指教分快赌没了,就不发满分帖了

解决方案 »

  1.   

    --> 测试数据: @tb
    declare @tb table (id varchar(1),name int)
    insert into @tb
    select 'a',1 union
    select 'b',1 union
    select 'c',1 union
    select 'd',1 union
    select 'e',1declare @s int
    set @s=0
    update @tb set name=@s,@s=@s+1   ---根据这个理解,应该是一句一句执行的select * from @tb
    id   name
    ---- -----------
    a    1
    b    2
    c    3
    d    4
    e    5(5 行受影响)
      

  2.   

    聚集索引会改变select的输出顺序
      

  3.   

    查了一下资料:update 中set :
    (1)、变量赋值优先于更新列值
    (2)、变量赋值按列出的先后顺序执行
    (3)、对于列的赋值,是更新时同时进行的
      

  4.   

    应该是第三条的说法,那实际执行的时候是怎么样的?先把所有数据放到DELETED表再根据DELETED表的内容更新原表?
      

  5.   

    2、
    SELECT distinct * FROM TB
    可能会导致排序