none
SQL下“存储过程”的"执行顺序" RRS feed

  • 问题

  • Exec   Usp_TransferDAListToEnergyDataN    @MeterNo,@MeterType,@DATime,@IncreaseQty,@Unit;

    Exec   Usp_TransferDAListToEnergyDataBySum    @MeterNo,@MeterType,@DATime,@IncreaseQty,@Unit;

    这样两个执行存储过程的语句是在一个SQL中的。   

    请问大师:

          1、数据库是“执行完第一个之后再执行第二个”,还是“两个一起执行”   ?

          2、 如果“两个一起执行”的话,当两个操作到“同一个表”,不就会出现死锁 ?

          3、如果先执行完第一个,再去执行第二个,“效率不就很低”吗?



    Science and technology is my lover.

    2012年10月25日 6:43

答案

  • 顺序执行的

    如果是并发了,就乱套了,你可以把它理解为程序代码,一个过程中的程序代码是顺序执行下去的,就算在这个过程中调用了其他过程也一样

    就逄你在程序中用多线程,它的执行其实也是顺序的,只是你用多线程的话,可以让前一句不需要在执行完成后就去执行后一句

    2012年10月25日 7:58
  • 先执行【存储过程一】,再执行【存储过程二】,如果【存储过程一】内部调用【存储过程二】了,也是顺序执行的。

    如果【存储过程一】中调用【存储过程二】了,你上面的代码就意味着【存储过程二】要执行两次。

    2012年10月27日 14:19
    版主

全部回复

  • 顺序执行的

    如果是并发了,就乱套了,你可以把它理解为程序代码,一个过程中的程序代码是顺序执行下去的,就算在这个过程中调用了其他过程也一样

    就逄你在程序中用多线程,它的执行其实也是顺序的,只是你用多线程的话,可以让前一句不需要在执行完成后就去执行后一句

    2012年10月25日 7:58
  • 如果你需要并行执行的话,你可以在调用时去做处理,比如用两个连接同时提交需求

    2012年10月25日 7:58
  • 谢谢大师。干的事情太多了,其实是多个存储过程相互调用完成的。

    如果开发一个客户端软件,开启“几十”个线程,同时去写入数据库。“异步”的将数据写入数据库中不同的表这样可以吗???


    在“存储过程”中必须要“顺序执行”,所以比较慢,“不能并发”。。。


    如果是客户端软件采用“多线程”,将“原有汇总”的存储过程拆分,然后同时写入,这样就支持“并发”了。


    这样就是“几十”个线程“同时对数据库”的访问会比较多,不知可不可以?

    Science and technology is my lover.

    2012年10月26日 1:07
  • Theoretically yes, you have to test it and compare results.
    2012年10月26日 13:03
  • 看来并发、并行的概念也比较容易被误解。。。估计楼主项目中没有专业的DBA,或者说偏开发的DBA

    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    2012年10月27日 3:52
  • 先执行【存储过程一】,再执行【存储过程二】,如果【存储过程一】内部调用【存储过程二】了,也是顺序执行的。

    如果【存储过程一】中调用【存储过程二】了,你上面的代码就意味着【存储过程二】要执行两次。

    2012年10月27日 14:19
    版主