SQL Procedure ile Dinamik TOPN Sorgusu

Arkadaşlar merhaba;

Bir süredir makale yazmıyordum. Tekrardan bir SQL makale ile giriş yapmak istedim.
Bu yazımızda TOPN komutunun Procudureler aracılığıyla ile parametrik olarak uyğulanmasını işleyeceğiz.

Öncelikle kısaca bir sorgu üzerinde TopN komutu nedir ondan bahsedelim.

SELECT TOP 10 * FROM MUSTERILER
Kullanım şekli böyle olan TOP komutu bize ilk 10 kaydı getirir. TOP 100 yazsaydık ilk 100 kaydı getirirdi.
Peki nerede işimize yarar; ilk aklıma gelen sitemize üye olan ilk 10 kişi kimdir? gibi sorulara cevap verir. Sadece 10 kayıt için bütün kayıtları çekmek çok mantıklı olmayacaktır.

İlk 10 (100) kayıt dedik ama bu herhangi bir ordery by komutu kullanılmazsa ASC yani artan sıralama ile çalışır. Bu durumda ilk N kaydı, order by DESC kullanılırsa son N kaydı getirir.

Bu kadar bilgiden sonra asıl konumuz olan TOPN komutunu parametrik olarak nasıl alınır sorusunu cevaplayalım.

Önce Proceduremizi yazalım:

CREATE PROC TOPN
@ROWCOUNT VARCHAR(10),
@SORTING VARCHAR(3)
AS
DECLARE @KOMUT VARCHAR(MAX)
SET @KOMUT='SELECT TOP '+ @ROWCOUNT +' * FROM MUSTERI ORDER BY ID '+ @SORTING

EXEC (@KOMUT)

Bu kadar olan Procuderemiz iki tane parametre alır.
Birincisi TOP için getirmek istediğiniz kayıt sayısı diğeri ise sıralama yönüdür (ASC veya DESC)

Önceden de bahsettiğim gibi asc kullanırsanız ilk girilen kayıtları desc kullanırsanız son girilen kayıtları getirir.
Query Analyzer da test etmek için
EXEC TOPN 5,'ASC'

Faydalı olması umuduyla... hatıram olsun...