C# 有没有办法只从长时间运行的SQL Server存储过程中获取第一页数据?

C# 有没有办法只从长时间运行的SQL Server存储过程中获取第一页数据?,c#,sql-server,stored-procedures,asp.net-web-api,data-paging,C#,Sql Server,Stored Procedures,Asp.net Web Api,Data Paging,我的最终需要是在Web API页面上显示一些报告(SQL Server存储过程的结果) 挑战在于返回此数据的存储过程非常慢,有时需要几分钟才能运行。没有一个右(或左)脑的用户会发现这种看似无休止的延迟是可以接受的,因此我想知道是否有一种方法可以让第一页(比如40或50行数据)作为“奶嘴”呈现给他们,而其余的则在后续页面中呈现为“幕后” 我知道以这种方式呈现数据(一次呈现一个页面)是很常见的,但实际上是否有可能以这种方式“分割”存储过程以加快它的速度,也就是说不改变存储过程本身——仅从Web AP

我的最终需要是在Web API页面上显示一些报告(SQL Server存储过程的结果)

挑战在于返回此数据的存储过程非常慢,有时需要几分钟才能运行。没有一个右(或左)脑的用户会发现这种看似无休止的延迟是可以接受的,因此我想知道是否有一种方法可以让第一页(比如40或50行数据)作为“奶嘴”呈现给他们,而其余的则在后续页面中呈现为“幕后”

我知道以这种方式呈现数据(一次呈现一个页面)是很常见的,但实际上是否有可能以这种方式“分割”存储过程以加快它的速度,也就是说不改变存储过程本身——仅从Web API应用程序中的C#(或Javascript)开始

我能想到的唯一其他可行的选择(以及它是否可行有待讨论)是将保存为.xlsx(或.csv)文件的预运行报告存储到服务器上,在服务器上可以从Web API应用程序访问这些报告,并对其进行转换/处理以显示在页面上。这需要将文件从客户端实用程序发送到服务器计算机(!),并且可能需要在服务器上使用Excel互操作(!)

这个恶棍的最后一个避难所是,在存储过程发出嘎嘎声的时候,向用户显示一个跳舞的熊在玩猫咪之类的游戏的.gif

更新 两个答案都很好,作为一个领跑者(失败者的支持者),我选择了得分较少的猫


受这两种猫的启发,我想我会做的是在创建每个Excel报表时向我的Web API应用程序发送一条“消息”,将数据(通过调用相同的SP)存储在服务器上的一个表中。当用户浏览到提供的链接时,报告数据将可供用户使用。到他们实际执行此操作时(通常至少几分钟后),该表将已填充SP的数据,随后的页面呈现应该最多几秒钟,而不是几分钟。

我可能会安排一个在后台运行的作业,并将SP的结果存储在一个表中,并将从web api作为一种缓存进行访问


您可以在sql server中调度作业,也可以使用

我可能会调度一个在后台运行的作业,并将SP的结果存储在一个表中,并且可以从web api作为一种缓存进行访问


您可以在sql server中或使用

计划作业,而不知道具体使用的是什么,也不知道如何呈现存储过程的结果。实际上,我建议按常规计划预先运行大型报告,这样可以在常规时间释放资源,并允许用户“跳过”等待。但是,客户机可能无法直接访问托管DB的服务器,使用必要的安全协议设置FTP服务器可能是自动化服务器和客户机之间文件传输的最简单方法。(SSI具有非常快速和简单的拖放界面,用于设置需要连接到ftp的作业)


您还可以创建一个重复的存储过程,该过程只返回结果的一小部分,在主过程仍在运行时调用并呈现它(您可能需要设置某种计时器,以不断检查主过程是否已完成)

不知道具体使用的是什么,也不知道如何呈现存储过程的结果。实际上,我建议按常规计划预先运行大型报告,这样可以在常规时间释放资源,并允许用户“跳过”等待。但是,客户机可能无法直接访问托管DB的服务器,使用必要的安全协议设置FTP服务器可能是自动化服务器和客户机之间文件传输的最简单方法。(SSI具有非常快速和简单的拖放界面,用于设置需要连接到ftp的作业)

您还可以创建一个重复的存储过程,该过程只返回结果的一小部分,在主过程仍在运行时调用并呈现它(您可能需要设置某种计时器,以不断检查主过程是否已完成)