T-SQL返回结果并继续处理

cst*_*fel 2 sql t-sql sql-server

我有一个存储过程,我希望通过从存储过程提前返回数据然后允许它继续处理来加速.

基本上现在我有这样的事情:

CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName> 
    @someargshere
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    UPDATE lastAccessedTime = GETUTCDATE() WHERE based on someargs;
    SELECT some fields WHERE based on someargs;
END
Run Code Online (Sandbox Code Playgroud)

我实际上并不关心lastAccessedTime对于SELECT语句是什么,但我发现返回行结果集的唯一方法是SELECT在最后执行,因为我发现的所有文档都说RETURN只需要一个整数表达式.我希望尽早返回结果,以便为应用程序提供尽可能绝对最快的响应时间,以便在服务器执行更新时继续处理.所以我想做点什么

SELECTT.....
RETURN results to app
UPDATE after connection has sent results
Run Code Online (Sandbox Code Playgroud)

这是可能的还是有更好的方法呢?

Rah*_*hul 6

不,不认为你能做到这一点,因为它是一个顺序处理.此外,即使你能够做到这一点,你最终会读取旧数据而不是实际更新的数据; 这也被称为DIRTY READ.

您在第一部分发布的内容是正确的.执行第UPDATE一个然后SELECT执行数据并返回应用程序.只有当整个处理结束时,您的过程才会返回,而您所说的不一样(或者同样以多线程编程语言发生).

虽然您可以根据您的应用程序编程语言(如果它支持多线程)分离SELECT和处理UPDATE不同的过程/ adhoc查询; 有两个线程在运行,其中一个将SELECT来自表,另一个将执行UPDATE(如果C#那时你可以使用TPL;具体而言async - await).虽然你将不得不设置TRANSACTION ISOLATION LEVELREAD UNCOMMITTED可能在这种情况下.