2015-05-07 9 views
7

mam tej kwerendy SQL:Jak sprawdzić, czy serwer SQL przycina wynik, jeśli używane jest TOP?

SELECT TOP 10 * FROM MyTable 

Jak mogę stwierdzić, czy wyniki były krótko obcięte, tj MojaTabela faktycznie ma więcej niż 10 wierszy?

+0

p.s. Powodem, dla którego mnie to interesuje, jest to, że jeśli jest więcej wyników, chcę zarejestrować fakt, że zestaw wyników został skrócony. Jeśli nie dodaję żadnego limitu, zestaw wyników może być ogromny, co oznaczałoby, że serwer SQL przestałby działać. – Contango

+4

Wykonaj TOP 11, a zobaczysz. – jarlh

+3

Zapytanie do góry 11 i używanie tylko 10 wierszy –

Odpowiedz

2

Możesz użyć numeru COUNT, aby uzyskać całkowitą liczbę wierszy.

SELECT COUNT(*) 
FROM MyTable 

Możesz sprawdzić, czy ten wynik jest większy niż 10, aby określić, czy ma więcej niż 10 wierszy.

0

Możesz zwrócić całkowitą liczbę wierszy, używając count(*) jako dodatkowej kolumny.

coś takiego:

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

Najprostszym sposobem jest dodanie kolumny COUNT..OVER że Zwraca całkowity wierszy w tabeli w tym samym zapytaniu:

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

Ta suma jest obliczone po klauzule FROM i WHERE są wykonywane, ale przed stosuje się klauzulę TOP.

+2

Cholera. brakowało o 2 sekundy ... przegłosowano. –

+4

Jednak myślę, że chciałbym również zwrócić uwagę na fakt, że wybieranie rekordów top x bez klauzuli order by jest nonsensowne. –

+0

@ZoharPeled Zgodne. – RBarryYoung

5

Cheat:

SELECT TOP 11 * FROM MyTable 

i sprawdzić, czy znajduje się 11 rzędów :-) Potem ignorować jedenastym wierszu. Zauważ, że na podstawie komentarza, który napisałeś, być może nie zrozumiałeś: robisz to zapytanie zamiast zapytania TOP 10.

Jeśli istnieje < = 10 wierszy, wówczas cały zestaw wyników zostałby zwrócony przez TOP 10. Jeśli jest 11 rzędów, to oczywiście nie wystarczyłoby TOP 10.

Powiązane problemy