存储过程包含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将并行运行或者一个接一个地运行..
这可能是一个基本问题,但只是想知道一些想法...... 感谢
答案 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