1

如果我在 Sql Server 2008 中有一个存储过程或触发器,它可以在另一个非阻塞线程中进行一些 sql 计算吗?IE。在后台的东西

另外,两个sql代码块可以并行运行吗?还是两个存储过程并行运行?

例如。想象一下,在用户执行某些“操作”后,我们被赋予了计算每个 Stack Overflow 用户的分数的工作(请留下所有的“做 elsehwere/service/batch/overnight/etc, elswhere”)。

所以我们在 Post 表上有一个触发器,所以当插入一个新帖子时,触发器会触发,并且作为该逻辑的一部分,它会计算用户的最新分数。我们可以要求它在后台或并行计算分数,而不是等待存储的过程完成并阻止当前的 sql 线程/执行。

干杯!

4

2 回答 2

2

SQL Server 没有并行或延迟执行:连接中运行的每个代码块都是串行的,一行接一行。

要解耦处理,您通常必须使用 SQL Server 代理作业或使用服务代理。这些开始在新连接、新会话等中执行

这是有道理的:

  • 如果您想回滚更改怎么办?后台线程是做什么的,它是怎么知道的?
  • 它使用什么数据?新、旧、锁定等待、快照?
  • 如果它领先于主线程并使用陈旧数据怎么办?
于 2009-10-30T05:23:50.427 回答
1

不,但您可以将请求写入队列。Service Broker 是一个 SQL Server 组件,它为这种事情提供了支持。这可能是异步处理的最佳选择。

于 2009-10-30T05:44:43.483 回答