SQL - Возвращает ограниченное количество строк, но полное количество строк
-
18-09-2019 - |
Вопрос
Сценарий:Мне нужно извлечь информацию из базы данных Visual FoxPro;однако выполнение больших запросов против этого имеет тенденцию к блокировке системы.Чтобы решить эту проблему, мы установили ограничения, которые отменяли запрос, если он выполнялся по истечении определенного промежутка времени, и ограничивали количество строк, которые он возвращал.
Есть ли способ выполнить запрос с "SELECT TOP ###", но также вернуть фактическое количество строк, найденных с помощью инструкции?Или это единственный способ выполнить запрос дважды?(причина в том, что мы все еще можем выполнить запрос, но проинформировать пользователя о том, что происходит.т. е."Первый ### отображаемый из ### найденных элементов").
Моя первоначальная попытка состояла в том, чтобы просто добавить "COUNT (*)" к части select инструкции, но это не совсем соответствовало тому, что я искал (оно вернуло правильное количество строк, но вернуло только одну строку для остальных данных).
Решение
Если я правильно понимаю вопрос, вы могли бы выполнить подвыборку, но это будет означать, что вы вызываете count SQL для каждой возвращаемой строки:
select top 10 field1, field2, (select count(*) from table) as totalrows from table
Это даст вам 10 лучших строк с дополнительным столбцом в каждой под названием totalrows, содержащим количество всех строк в таблице.
Лично, однако, я бы просто запустил отдельный запрос, чтобы получить верхнюю n строки и подсчет.
Другие советы
Вам нужно было бы запустить 2 отдельных выбора.Один для получения количества строк, возвращенных запросом, а затем для возврата подмножества записей для конкретной страницы.
Вы могли бы оптимизировать это, извлекая общее количество только один раз, когда извлекается первая "страница" (т.е.не выполняйте полный подсчет для последующих страниц)