SQL - возвращает ограниченное количество строк, но полное количество строк

Сценарий: мне нужно извлечь информацию из базы данных Visual FoxPro; однако выполнение больших запросов к этому имеет тенденцию блокировать систему. Чтобы решить эту проблему, мы установили ограничения, которые отменяли запрос, если он выполнялся по прошествии определенного времени, и ограничили количество возвращаемых строк.

Есть ли способ получить запрос с «SELECT TOP ###», но также вернуть фактическое количество строк, найденных с помощью оператора? Или это единственный способ выполнить запрос дважды? (причина в том, что мы все еще можем выполнить запрос, но проинформировать пользователя о том, что происходит. т.е. «Первый ### отображается из ### найденных элементов»).

Мое первоначальное испытание заключалось в том, чтобы просто добавить «COUNT (*)» к выбранной части оператора, но это не совсем выполнило то, что я искал (оно вернуло правильное количество строк, но вернуло только одну строку для остальные данные).


person John    schedule 04.02.2010    source источник
comment
разве FoxPro не был прекращен?   -  person Mitch Wheat    schedule 04.02.2010
comment
Visual FoxPro 9 SP2 будет поддерживаться Microsoft до 2014 года.   -  person Alan B    schedule 05.02.2010


Ответы (2)


Если я правильно понимаю вопрос, вы можете сделать подвыбор, но это будет означать, что вы вызываете SQL count для каждой возвращенной строки:

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

Это даст вам 10 верхних строк с дополнительным столбцом в каждой, называемом totalrows, содержащим количество всех строк в таблице.

Лично я бы просто запустил отдельный запрос, чтобы получить первые n строк и их количество.

person Mark Bell    schedule 04.02.2010
comment
Это то, что я подумал, но я надеялся, что есть способ сделать это с помощью одного запроса. - person John; 04.02.2010
comment
как насчет того, чтобы выбрать его в отдельной переменной, например @myRowsCount = Выберите COUNT (*) из таблицы, а затем поместите его в запрос, например: выберите верхние 10 field1, field2, @myRowsCount в качестве итоговых строк из таблицы - person Yaroslav Yakovlev; 17.09.2010

Вам нужно будет запустить 2 отдельных SELECT. Один для получения COUNT строк, возвращенных запросом, а затем для возврата подмножества записей для конкретной страницы.

Вы можете оптимизировать это, получая общее количество COUNT только один раз, когда извлекается первая «страница» (т.е. не выполняйте полный подсчет для последующих страниц)

person AdaTheDev    schedule 04.02.2010