【问题标题】:Dml statements in SP runs parallely or sequencially sql server?SP中的dml语句并行或顺序运行sql server?
【发布时间】:2013-08-25 02:30:33
【问题描述】:

存储过程包含 2 个 dml 语句,即 2 个更新查询。 需要在第一个查询完成后才执行第二个语句。

CREATE PROCEDURE usp_pn
AS
BEGIN

Update [db1].dbo.[table1]
SET
    [date1] = DateDiff(MI,[Ar_DateTime],[Departure_DateTime])



    Update [db1].dbo.[table1]
SET
    [InMinutes] = [date1]+some_calculation



END
GO

我想确保第二次更新必须在第一次更新完成后运行 那么我可以写如上所示的存储过程还是需要任何修改??# 请推荐

我只想知道执行细节:即一个sp中有多个dml语句,那么这两个是并行运行还是一个接一个运行..

这可能是一个基本问题,但只是想知道一些想法...... 谢谢

【问题讨论】:

    标签: sql-server sql-server-2008 tsql sql-server-2005 sql-server-2008-r2


    【解决方案1】:

    语句总是按顺序运行。

    单个语句可以并行化,但 SQL Server 永远不会在同一个批处理中并行运行不同的语句。

    一篇很棒的Remus Rusanu 文章讨论了这个(以及更多)是Understanding how SQL Server executes a query

    这应该解决经常被问到的问题 SQL批处理(=>请求=>任务=>工作者)可以并行执行:不, 因为它们在单个线程(=> worker)上执行,然后每个 语句必须在下一个开始之前完成。

    对于您问题中的具体示例(也许这是一个过于简化的示例?)我会使用单个语句

    UPDATE [db1].dbo.[table1]
    SET    [date1] = DateDiff(MI, [Ar_DateTime], [Departure_DateTime]),
           [InMinutes] = DateDiff(MI, [Ar_DateTime], [Departure_DateTime]) + some_calculation 
    

    【讨论】:

      猜你喜欢
      • 2014-10-25
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      相关资源
      最近更新 更多