繁体   English   中英

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

[英]Is there a way to get just the first page of data from a long-running SQL Server stored procedure?

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

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

我知道以这种方式(一次一页) 呈现数据是很常见的,但是实际上可以通过这种方式“切片”存储过程来加快速度,即无需更改存储过程本身-只是从Web API应用程序中的C#(或Javascript)获得?

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

这个无赖的最后避难所就是向用户显示一个跳舞熊玩杂耍的小猫的.gif或其他东西,而存储过程却不在话下。

更新

这两个答案都很好,并且从一开始就成为落后者(弱者的支持者),我选择了得分少的猫。

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

可能我会安排一个在后台运行的作业,并将SP的结果存储在一个表中,并且可以通过Web api作为一种缓存来进行访问。

您可以在SQL Server或使用Hangfire中安排作业

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM