在Sql Server 2008中,我有一个存储过程,它将结果写入输出参数并将参数插入表中。我希望SP的"插入表"部分异步运行,以便可以从输出参数读取结果,而无需等待插入命令完成。
我该怎么做呢?
例如。
CREATE PROCEDURE dbo.Sample_sp
@RESULT INT OUTPUT
@PARAM_1 INT,
@PARAM_2 INT,
@PARAM_N FLOAT
AS
-- Perform Calculations like @RES = @PARAM_1 + @PARAM_2......
INSERT INTO DBO.A VALUES(@PARAM_1, @PARAM_2, ..... @PARAM_N)
EXECUTE ASYNC dbo.Sample_sp
3条答案
按热度按时间eqqqjvef1#
这是可能的(参见Asynchronous procedure execution),但结果很可能不是你想要的。首先,使用异步意味着打破过程调用者假设的事务上下文(插入发生在一个 * 不同的 * 事务中)。此外,使用可靠的异步(如我的链接文章中所述)意味着要执行更多的写操作,因此没有性能优势。
为什么要从异步开始呢?插入的代价通常在响应延迟中不明显,除非它阻塞在锁上。如果你有锁争用,解决这个问题。
jutyujz02#
在标准SQL中无法执行此操作:它是同步的。在存储过程完成之前,您也不能处理输出参数。
您必须使用service broker来解耦计算和INSERT(编辑:根据Remus的回答和示例)
当然,请注意,现在需要更复杂的错误处理来处理任何错误和回滚,因为INSERT将被解耦,您不会立即得到任何错误的反馈。
当然,为什么不先在客户端进行计算呢?也就是说,你真正想解决的问题是什么?
n9vozmp43#
创建执行作业
sp启动作业(事务SQL)