Denemeler sonucu elde ettiğim ve kullanımı da oldukça kolay olan bir stored procedure stored procedure. Öncelikle belirtmek isterim ki MsSQL platformuna ait bu stored procedure veri sayfalamanızda, veri listelemenizde, son kayıtları getirmenizde kullanabileceğiniz bir sp olup performans seviyesi sizin de denemeleriniz sonunda görebileceğiniz gibi oldukça yüksektir.
CREATE PROCEDURE SP_RESULT(@Tables varchar(1000),@PK varchar(100),@Sort varchar(200) = NULL,@PageNumber int = 1,@PageSize int = 10,@Fields varchar(1000) = ‘*’,@Filter varchar(1000) = NULL,@Group varchar(1000) = NULL)ASIF @Sort IS NULL OR @Sort = ”SET @Sort = @PKDECLARE @SortTable varchar(100)DECLARE @SortName varchar(100)DECLARE @strSortColumn varchar(200)DECLARE @operator char(2)DECLARE @type varchar(100)DECLARE @prec intIF CHARINDEX(‘DESC’,@Sort)>0BEGINSET @strSortColumn = REPLACE(@Sort, ‘DESC’, ”)SET @operator = ‘<='ENDELSEBEGINIF CHARINDEX('ASC', @Sort) = 0SET @strSortColumn = REPLACE(@Sort, 'ASC', '')SET @operator = '>=’ENDIF CHARINDEX(‘.’, @strSortColumn) > 0BEGINSET @SortTable = SUBSTRING(@strSortColumn, 0, CHARINDEX(‘.’,@strSortColumn))SET @SortName = SUBSTRING(@strSortColumn, CHARINDEX(‘.’,@strSortColumn) + 1, LEN(@strSortColumn))ENDELSEBEGINSET @SortTable = @TablesSET @SortName = @strSortColumnENDSELECT @type=t.name, @prec=c.precFROM sysobjects oJOIN syscolumns c on o.id=c.idJOIN systypes t on c.xusertype=t.xusertypeWHERE o.name = @SortTable AND c.name = @SortNameIF CHARINDEX(‘char’, @type) > 0SET @type = @type + ‘(‘ + CAST(@prec AS varchar) + ‘)’DECLARE @strPageSize varchar(50)DECLARE @strStartRow varchar(50)DECLARE @strFilter varchar(1000)DECLARE @strSimpleFilter varchar(1000)DECLARE @strGroup varchar(1000)IF @PageNumber < 1SET @PageNumber = 1SET @strPageSize = CAST(@PageSize AS varchar(50))SET @strStartRow = CAST(((@PageNumber - 1)*@PageSize + 1) AS varchar(50))IF @Filter IS NOT NULL AND @Filter != ''BEGINSET @strFilter = ' WHERE ' + @Filter + ' 'SET @strSimpleFilter = ' AND ' + @Filter + ' 'ENDELSEBEGINSET @strSimpleFilter = ''SET @strFilter = ''ENDIF @Group IS NOT NULL AND @Group != ''SET @strGroup = ' GROUP BY ' + @Group + ' 'ELSESET @strGroup = ''EXEC('DECLARE @SortColumn ' + @type + 'SET ROWCOUNT ' + @strStartRow + 'SELECT @SortColumn=' + @strSortColumn + ' FROM ' + @Tables + @strFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + 'SET ROWCOUNT ' + @strPageSize + 'SELECT ' + @Fields + ' FROM ' + @Tables + ' WHERE ' + @strSortColumn + @operator + ' @SortColumn ' + @strSimpleFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '')
Girdi değerlerinden kullanımını anlayabileceğiniz gibi ben yine de SP nin kullanımı ile ilgili birkaç örnek göstermek isterim …Temel olarak
exec SP_RESULT ‘Tablo’,’PrimaryKey’,’ListelemeYöntemi’,’SayfaNumarasi’,’KayitSayisi’,’Sutunlar’,’Sorgu’,’Gruplama’
şeklindedir … Devamında örneklemek gerekirse …1 sayfada 10 tane alfabetik siralanmış üye listesi:
exec SP_RESULT ‘Users’,’UserID’,’UserName’,’1′,’10’,’UserID,UserName’,”,”,”
3 sayfa da 50 tane son üyelerin listesi :
exec SP_RESULT ‘Users’,’UserID’,’UserID DESC’,’3′,’50’,’UserID,UserName’,”,”,”
Son 10 üyeliği onaylanmış üyenin listesi :
exec SP_RESULT ‘Users’,’UserID’,’UserID DESC’,’1′,’10’,’UserID,UserName’,’UserConfirm = 1′,”,”
… gibi … Tek bir stored procedure ile tüm veritabanınızdaki verilerileri sorgulayabilir ve listeleyebilirsiniz. Tablo bölgesine istediğiniz view ismini yazarak view içinde kullanabilirsiniz. Performansınızın artması niyetiyle …