SQL Server - 异步查询执行

Ahm*_*tun 7 sql t-sql sql-server stored-procedures

在Sql Server 2008中,我有一个存储过程,它将结果写入输出参数并将参数插入表中.我想让SP的"插入表"部分异步运行,以便可以从输出参数中读取结果,而无需等待insert命令完成.

我该怎么做?

例如.

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)
Run Code Online (Sandbox Code Playgroud)

 

EXECUTE ASYNC dbo.Sample_sp
Run Code Online (Sandbox Code Playgroud)

Rem*_*anu 8

有可能(参见异步程序执行),但很可能结果不是你想要的.首先,异步意味着打破过程调用者所假定的事务上下文(插入发生在不同的事务中).此外,执行可靠的异步(如在我的链接文章中)意味着执行更多写操作,因此没有性能优势.

你为什么要开始异步?插件的成本通常在响应延迟中不明显,除非它阻塞锁.如果您有锁定争用,请解决问题.


gbn*_*gbn 7

您无法在标准SQL中执行此操作:它是同步的.在存储过程完成之前,您也无法处理输出参数.

您必须使用服务代理来解除计算和INSERT(编辑:根据Remus的回答示例)

请注意,您现在需要更复杂的错误处理来处理任何错误和回滚,因为您的INSERT将被解耦,并且您无法立即得到任何错误的反馈.

当然,为什么不先在客户端进行计算呢?你真正试图解决的问题是什么......