2012-09-11 19 views
5

Ho una query in SQL Server 2012 che dovrebbe recuperare un numero di record in base alla dimensione della pagina specificata e alla pagina in cui si trova. Sembra che:Scollegamento Recupera Avanti per ottenere tutte le righe

 

SELECT LocID, LocName 
FROM Locations 
ORDER BY LocName OFFSET @PageNum ROWS 
FETCH NEXT @PageSize ROWS ONLY 
 

Il codice è piuttosto semplice. Quello che devo fare, però, è metterlo in una funzione per restituire correttamente il paging. Tuttavia, potrei anche aver bisogno di tutti i record indietro da questa funzione, quindi ho bisogno di avere l'opzione di chiamare la funzione senza OFFSET o FETCH (principalmente, questo è per un report che non ha paginazione e dovrebbe essere solo i dati dritti) . Non riesco a pensare a un buon modo per farlo.

+0

Perché non basta chiamarlo con un '@ PageSize' abbastanza grande da restituire tutti i record? –

+1

Il problema è che non so quanto sarà grande il set di record fino a dopo averlo eseguito. Ho avuto un'altra domanda su qualcosa di simile a quel problema. – CrystalBlue

+2

Il limite superiore di INT o BIGINT dovrebbe essere sufficiente, a seconda ... –

risposta

7

Si potrebbe dire:

@PageNum INT, 
@PageSize INT 

... 

SELECT @PageSize = COALESCE(@PageSize, 2000000000); 
-- 2 billion should be enough? 

... OFFSET (COALESCE(@PageNum, 1)-1)*@PageSize ROWS 
FETCH NEXT @PageSize ROWS ONLY; 

Quando si desidera solo tutte le righe, passare NULL per entrambi i parametri.

+0

Questo è quello che mi è stato suggerito di fare da altre persone per ora, quindi questa sembra la risposta più valida. Grazie! – CrystalBlue

Problemi correlati