2015-05-07 11 views
7

Ho questa query SQL:Come sapere se il server SQL sta tagliando il risultato se si utilizza TOP?

SELECT TOP 10 * FROM MyTable 

Come faccio a sapere se i risultati sono stati tagliati corti, vale a dire MyTable in realtà ha più di 10 righe?

+0

p.s. La ragione per cui sono interessato a questo è che se ci sono più risultati, voglio registrare il fatto che il set di risultati è stato interrotto. Se non aggiungo alcun limite, il set di risultati potrebbe essere enorme, il che significherebbe il blocco del server SQL. – Contango

+4

Fai TOP 11 e vedrai. – jarlh

+3

Query superiore 11 e utilizza solo 10 righe –

risposta

2

È possibile utilizzare COUNT per ottenere il numero totale di righe.

SELECT COUNT(*) 
FROM MyTable 

È possibile verificare se il risultato è maggiore di 10 per determinare se ha più di 10 righe.

0

È possibile restituire il numero totale di righe utilizzando count(*) come colonna aggiuntiva.

Qualcosa di simile a questo:

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

Il modo più semplice è quello di aggiungere una colonna COUNT..OVER che restituisce le righe totali nella tabella nella stessa query:

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

Questo totale è calcolato dopo le clausole FROM e WHERE vengono eseguite, ma prima dello viene applicata la clausola TOP.

+2

Accidenti. perso per 2 secondi ... upvoted. –

+4

Tuttavia, penso che vorrei anche sottolineare il fatto che selezionare x top records senza una clausola order by non ha senso. –

+0

@ZoharPeled Concordato. – RBarryYoung

5

frode:

SELECT TOP 11 * FROM MyTable 

e verificare se ci sono 11 righe :-) Poi ignorare undicesima fila. Nota che da un commento che hai scritto, forse non hai capito: fai questa query invece della query TOP 10.

Se ci sono < = 10 righe, l'intero gruppo di risultati sarebbe stato restituito da TOP 10. Se ci sono 11 righe, allora un TOP 10 chiaramente non sarebbe stato sufficiente.

Problemi correlati