1

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

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

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

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

4

1 回答 1

2

语句总是按顺序运行。

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

一篇很棒的Remus Rusanu文章讨论了这个(以及更多)是了解 SQL Server 如何执行查询

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

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

UPDATE [db1].dbo.[table1]
SET    [date1] = DateDiff(MI, [Ar_DateTime], [Departure_DateTime]),
       [InMinutes] = DateDiff(MI, [Ar_DateTime], [Departure_DateTime]) + some_calculation 
于 2013-08-22T12:19:51.527 回答