2015-05-07 2 views
7

У меня есть этот SQL-запрос:Как определить, завершает ли SQL-сервер результат, если используется TOP?

SELECT TOP 10 * FROM MyTable 

Как сказать, если результаты были прерваны, т.е. MyTable на самом деле имеет более 10 строк?

+0

p.s. Причина, по которой я заинтересован в этом, заключается в том, что, если есть больше результатов, я хочу зарегистрировать тот факт, что результирующий набор был прерван. Если я не добавлю никаких ограничений, то набор результатов может быть огромным, что означает, что SQL-сервер остановится. – Contango

+4

Сделайте ТОП-11, и вы увидите. – jarlh

+3

Query top 11 и используйте только 10 строк –

ответ

2

Вы можете использовать COUNT, чтобы получить общее количество строк.

SELECT COUNT(*) 
FROM MyTable 

Вы можете проверить, больше ли этот результат, чем 10, чтобы определить, имеет ли он более 10 строк.

0

Вы можете вернуть общее количество строк, используя count(*) в качестве дополнительной колонки.

Что-то вроде этого:

select top 10 T1.*, T2.Total 
from MyTable as T1 
    outer apply (select count(*) as Total from MyTable) as T2 
9

Самый простой способ добавить столбец COUNT..OVER, который возвращает общее количество строк в таблице в том же запросе:

SELECT TOP 10 *, COUNT(*) OVER() As TotalRows FROM MyTable 

Это общее рассчитывается после выполняются предложения FROM и WHERE, но до применяется предложение TOP.

+2

Черт. пропущено на 2 секунды ... вверх. –

+4

Однако, я думаю, я также хотел бы указать на то, что выбор верхних записей х без предложения по порядку является бессмысленным. –

+0

@ ZoharPeled Согласен. – RBarryYoung

5

Чит:

SELECT TOP 11 * FROM MyTable 

и проверить, если есть 11 строк :-) Тогда игнорировать одиннадцатую строку. Обратите внимание, что из комментария, который вы написали, возможно, вы не понимали: вы делаете этот запрос вместо запроса TOP 10.

Если есть < = 10 rows, тогда весь набор результатов был бы возвращен TOP 10. Если есть 11 строк, то явно TOP 10 было бы недостаточно.

Смежные вопросы