***************************************************************  
功能: 大容量数量级分页存储过程  
***************************************************************  
参数说明:  
1.Tables :表名称,视图  
2.PrimaryKey :主关键字  
3.Sort :排序语句,不带Order By 比如:NewsID Desc,OrderRows Asc,若无,可输入null  
4.CurrentPage :当前页码  
5.PageSize :分页尺寸  
6.Filter :过滤语句,不带Where 若无,可输入null  
7.Group :Group语句,不带Group By 若无,可输入null  
调用示例:SP_Pager 'QsqArticle','ArtId','ArtID desc',1,10,'*','ArtId>=100',null  
***************************************************************/  
CREATE PROCEDURE SP_Pager  
(  
@Tables varchar(8000),  
@PrimaryKey varchar(8000),  
@Sort varchar(8000= NULL,  
@CurrentPage int = 1,  
@PageSize int = 10,  
@Fields varchar(8000= '*',  
@Filter varchar(8000= NULL,  
@Group varchar(8000= NULL  
)  
AS  
/*默认排序*/  
IF @Sort IS NULL or @Sort = ''  
SET @Sort = @PrimaryKey  
DECLARE @SortTable varchar(100)  
DECLARE @SortName varchar(100)  
DECLARE @strSortColumn varchar(200)  
DECLARE @operator char(2)  
DECLARE @type varchar(100)  
DECLARE @prec int  
/*设定排序语句.*/  
IF CHARINDEX('DESC',@Sort)>0  
BEGIN  
SET @strSortColumn = REPLACE(@Sort'DESC''')  
SET @operator = '<='  
END  
ELSE  
BEGIN  
IF CHARINDEX('ASC'@Sort= 0  
SET @strSortColumn = REPLACE(@Sort'ASC''')  
SET @operator = '>='  
END  
IF CHARINDEX('.'@strSortColumn> 0  
BEGIN  
SET @SortTable = SUBSTRING(@strSortColumn0CHARINDEX('.',@strSortColumn))  
SET @SortName = SUBSTRING(@strSortColumnCHARINDEX('.',@strSortColumn+ 1LEN(@strSortColumn))  
END  
ELSE  
BEGIN  
SET @SortTable = @Tables  
SET @SortName = @strSortColumn  
END  
Select @type=t.name, @prec=c.prec  
FROM sysobjects o   
JOIN syscolumns c on o.id=c.id  
JOIN systypes t on c.xusertype=t.xusertype  
Where o.name = @SortTable AND c.name = @SortName  
IF CHARINDEX('char'@type> 0  
SET @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 @CurrentPage < 1  
SET @CurrentPage = 1  
/*设置分页参数.*/  
SET @strPageSize = CAST(@PageSize AS varchar(50))  
SET @strStartRow = CAST(((@CurrentPage - 1)*@PageSize + 1AS varchar(50))  
/*筛选以及分组语句.*/  
  
  
  
IF @Filter IS NOT NULL AND @Filter != ''  
BEGIN  
SET @strFilter = ' Where ' + @Filter + ' '  
SET @strSimpleFilter = ' AND ' + @Filter + ' '  
END  
ELSE  
BEGIN  
SET @strSimpleFilter = ''  
SET @strFilter = ''  
END  
IF @Group IS NOT NULL AND @Group != ''  
SET @strGroup = ' GROUP BY ' + @Group + ' '  
ELSE  
SET @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 + '  
'  
)  
调用方法:
        }

相关文章:

  • 2021-12-26
  • 2021-10-18
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-30
相关资源
相似解决方案