update tab 
set a=1,b=(select top 1 ....),c=(select top 1 ....)where....

解决方案 »

  1.   

    1.应该只select 出你要更新的字段。
    2。可以同时调用的
      

  2.   

    update的过程:
    首先删除旧记录:delete from tab where a=旧值
    然后插入新记录:insert into tab values select ('1',b,c) from tab
      

  3.   

    第一个问题我再讲清楚点把:
    表:TAB 字段:a,b,c
    记录:a  b  c  
          1  a  33
    语句:update tab set a=2 where c=33
    这个语句在执行的时候,是不是只更新了字段a的值:set a=2
    还是同时因为更新了b,c 的值:set a=2,b=a,c=33
    虽然看上去字段b,c的值并没有变化,但是事实上他更新了
    是不是这样??
      

  4.   

    更新应该是先删除这条记录,再插入
    在触发器中可以调用
    select * from deleted
    select * from inserted
      

  5.   

    当然是一个个的执行吧, 或者是像cpu的工作原理,分配不同的时间,但快好像是同时执行这个不太懂猜的,
    我猜,我猜,我猜猜
      

  6.   

    1.是只处理 set 中涉及到的字段2.是同时执行
      

  7.   

    --关于第二个问题,你做如下测试就可以测试出来了--创建如下一个示例存储过程
    create proc p_test
    as
    create table ##t(id int)
    waitfor delay '00:05:00' --等待5分钟后继续
    drop table ##t
    go--然后开始一个窗口,调用存储过程
    exec p_test
    go--再开启一个窗口,再调用
    exec p_test--你会发现很快抛出错误,临时表##t已经存在,这说明第二个窗口并没有等待第一个调用完成,而是立即调用存储过程,所以调用是并发的,而不是排队的
      

  8.   

    1.只更新SET里面字段
    2.在多线程程序里面可以执行同一个存储过程~~~