【问题标题】:Is it possible to process a for loop in parallel within the same stored procedure?是否可以在同一个存储过程中并行处理 for 循环?
【发布时间】:2018-02-28 14:56:12
【问题描述】:

有一个 SQL Server 存储过程,我想在其中循环遍历从表中读取的一组选项。所以说一张桌子有100个选项。我的存储过程将遍历这些选项,并且对于每个选项,我需要做一些检查——通过根据选项查询几个特定的​​表并标记与之相关的状态。

我是否可以拆分 for 循环,以便在一个循环中处理第 1 -50 行,在另一个循环中处理第 51-100 行,并且我可以并行运行这两个循环?我看到了一种方法,您可以通过 SQL 作业或其他方式并行运行多个存储过程,但无法查看是否可以通过拆分 for 循环来并行执行。

【问题讨论】:

  • 如果我们帮助你找到一个基于集合的解决方案,而不是做所有这些循环怎么样?那么你根本不需要循环。但是不,你不能在存储过程中做多线程,至少不能在 t-sql 中。
  • 谢谢肖恩。鉴于多线程不可行,将研究逻辑以查看是否可以实施基于 Set 的逻辑

标签: sql-server loops stored-procedures foreach parallel-processing


【解决方案1】:

将您的问题视为学术问题,而不考虑是否可能存在基于集合的解决方案,因为几乎没有足够的信息来做到这一点。

不,您不能使用标准 TSQL 在单个循环中(或在两个单独的循环中)执行此操作,因为 TSQL 是同步的。即使您“拆分”循环,第二个过程调用也无法开始,直到第一个调用完成。它们不会并行运行。

要并行运行两个循环,您必须引入一些其他语言。 this search 的结果出现了很多想法,但我看到的前几个有很多关于陷阱和意外结果的警告。如果您想尝试其中任何一个,由您决定。

【讨论】:

  • 感谢选项卡。是的,我们正在考虑将这种逻辑转移到另一种语言,但是想看看我们是否可以在存储过程中做到这一点。正如我在上面评论的那样,必须重新访问逻辑,看看是否可以使用基于集合的逻辑来完成。
猜你喜欢
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多