項目中正在使用的SQL分頁存儲過程

從別的地方看到的,我加了幾句註釋:

 

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO


ALTER  PROCEDURE [dbo].[Common_Pagination] 

@tablename varchar(100), --要調用的表名
@tablefield varchar(20),  --排序關鍵字段
@where varchar(5000),   --判斷語句(如pid=1--分類id爲1的下屬內容)
@orderby varchar(500),  --排序方法(如order by id desc)
@fieldlist varchar(1000), --要調用的表中的字段列表
@curpage int,  --當前頁碼(從0開始計)
@page_record int--要調用的分頁記錄數
@sort varchar(8)   --判斷分頁內容的排序方向,desc ,asc,注意這個值應該與上面的order by方向一致

AS 

BEGIN 

DECLARE @cmd varchar(8000
DECLARE @uprecord int 
DECLARE @Op varchar(2-- 操作符 
DECLARE @max_min varchar(4-- 最大/最小計算 

SET @op = '<' 
SET @max_min = 'MIN' 

IF @sort = 'asc' 
BEGIN 
SET @Op = '>' 
SET @max_min = 'MAX' 
END 

SET @uprecord=@curpage * @page_record 
SET @where = '('+@where+')' 

IF @curpage = 0 
SET @cmd = 'SELECT TOP '+cast(@page_record AS NVARCHAR)+' '+@fieldlist+' FROM '+@tablename+' WHERE '+@where+' '+@orderby 
ELSE 
SET @cmd = 'SELECT TOP '+cast(@page_record AS NVARCHAR)+' '+@fieldlist+' FROM '+@tablename+' WHERE '+@where+' AND '+@tablefield+' 
'+@op+' (SELECT '+@max_min+'('+@tablefield+') FROM (SELECT TOP '+cast(@uprecord AS NVARCHAR)+' '+@tablefield+' FROM '+@tablename+' WHERE 
'+@where+' '+@orderby+') AS TmpTbl ) AND '+@where+' '+@orderby 

EXEC(@cmd
PRINT(@cmd

END 



GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章