2012-09-11 21 views
5

SQL Server 2012'de, belirttiğim sayfa boyutuna ve bulunduğunuz sayfaya bağlı olarak birkaç kayıt geri alması gereken bir sorgun var. Şöyle görünüyor:Ofset Getirme Sırasıyla tüm satırları al

 

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

Kod oldukça basit. Bununla birlikte, yapmam gereken şey, bu çağrıyı doğru bir şekilde döndürmek için bir işleve dönüştürülür. Bununla birlikte, bu fonksiyondan tüm kayıtlara ihtiyaç duyabiliyordum, bu yüzden herhangi bir OFFSET veya FETCH olmaksızın fonksiyonu çağırmak zorunda kalmam gerekiyor (çoğunlukla, bu çağrı yok ve sadece düz veri olması gereken bir rapor için) . Bunu yapmanın iyi bir yolu düşünemiyorum.

+0

Neden sadece '@ PageSize' ile tüm kayıtları döndürmek için yeterince büyük değil? –

+1

Sorun şu ki, kayıt setini çalıştırdıktan sonraya kadar ne kadar büyük olacağını bilmiyorum. Bu soruna benzer bir şey hakkında başka bir sorum vardı. – CrystalBlue

+2

INT veya BIGINT'in üst sınırı, aşağıdakilere bağlı olarak yeterli olmalıdır ... –

cevap

7

Sen söyleyebiliriz: Sadece tüm satırları istediğinizde, her iki parametrelere NULL geçmek

@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; 

.

+0

Şimdilik diğer insanlar tarafından önerildiğim şey bu, bu en geçerli cevap gibi görünüyor. Teşekkürler! – CrystalBlue