SP中的Dml语句是并行还是顺序运行sql server?

时间:2013-08-22 11:27:11

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

存储过程包含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

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

我只是想知道执行细节:那就是sp中有多个dml语句然后这些2将并行运行或者一个接一个地运行..

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

1 个答案:

答案 0 :(得分:2)

语句总是按顺序运行。

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

一篇很好的Remus Rusanu文章讨论了这个问题(以及更多内容)Understanding how SQL Server executes a query

  

这应该解决经常被问到的问题   SQL批处理(=> request => task => worker)可以并行执行:no,   因为它们是在一个线程(=> worker)上执行的,然后是每个线程   声明必须在下一个声明开始之前完成。

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

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