4

场景:我需要从 Visual FoxPro 数据库中提取信息;但是,针对此运行大型查询有锁定系统的趋势。为了解决这个问题,我们设置了限制,如果查询运行超过一定时间则取消查询,并限制它将返回的行数。

有没有办法使用“SELECT TOP ###”进行查询,但也可以返回通过语句找到的实际行数?或者是运行查询两次的唯一方法?(原因是我们仍然可以运行查询,但通知用户正在发生的事情。即“第一个 ### 显示 ### 找到的项目”)。

我最初的尝试只是简单地在语句的选择部分添加一个“COUNT(*)”,但这并没有完全实现我想要的(它返回了正确的行数,但只返回了一行其余数据)。

4

2 回答 2

2

如果我正确理解了这个问题,您可以进行子选择,但这意味着您为返回的每一行调用 count SQL:

select top 10 field1, field2, (select count(*) from table) as totalrows from table

这将为您提供前 10 行,每个行中都有一个额外的列,称为 totalrows,包含表中所有行的计数。

不过,就个人而言,我只是运行一个单独的查询来获取前n行和计数。

于 2010-02-04T14:43:42.773 回答
2

您需要运行 2 个单独的 SELECT。一种是检索查询返回的 COUNT 行,然后返回特定页面的记录子集。

您可以通过只检索一次总 COUNT 来优化这一点,当检索到第一个“页面”时(即不要对后续页面进行整个计数)

于 2010-02-04T14:45:50.680 回答