我想编写一个执行以下操作的存储过程:返回与查询匹配的记录数(以确定要显示给用户的页面数)从当前页面的查询返回具有特定记录子集的另一个记录集。
从我发现的另一个问题(对不起,我丢失了链接),我发现我们这样做是分页的:
SELECT u.* FROM ( SELECT t.*, ROW_NUMBER() OVER (ORDER BY t.id) as rownum FROM ( [obscenely long select query] ) as t ) AS u WHERE u.rowNum >= 1 AND u.rowNum <= 20
通过执行以下操作,我可以获得[冗长的选择查询]返回的记录数:
SELECT COUNT(*) AS numRecords from ([obscenely long select query]) AS records
我想尽可能有效地获得这两个记录集。
我能弄清楚该怎么做的唯一方法是将以上两个语句都放入一个存储过程中。由于某些原因,这使我感到效率低下:
我尝试过的其他解决方案:
有什么可以做的吗?我应该只是吸收它并坚持使用当前的解决方案,还是有一种更优雅的方法来实现这一目标?
根据[obscenely long select query]结构的不同,您可能可以使用临时表或表变量: -用匹配行的ID填充临时表 -计算临时表的行数以计算页数 -检索调用方构建的结果带有临时表和相关数据库表的查询
[obscenely long select query]