CREATE PROCEDURE [dbo].[GetPagingList](
@table nvarchar(1000), --表名
@FIEld nvarchar(1000) = '*', --读取字段
@Where nvarchar(500) = NulL, --Where条件
@GroupBy nvarchar(500) = NulL, --分组
@OrderBy nvarchar(500)= NulL, --排序字段
@PrimaryKeyFIEld nvarchar(50), --主键必需
@PageNumber int = 1, --开始页码
@PageSize int = 10, --页大小
@IsCount bit = 0 --是否返回记录总数
)
AS
BEGIN
------------------------------------------------------------------------------------------------
DECLARE @strWhere nvarchar(500) --Where 条件
IF @Where IS NOT NulL AND @Where != '' --Where 条件
BEGIN
SET @strWhere = ' WHERE ' + @Where + ' '
END
ELSE
BEGIN
SET @strWhere = ''
END
----------------------------------------------------------------------------------------------------
DECLARE @strGroupBy nvarchar(500) --GroupBy 条件
IF @GroupBy IS NOT NulL AND @GroupBy != '' --GroupBy 条件
BEGIN
SET @strGroupBy = ' GROUP BY ' + @GroupBy + ' '
END
ELSE
BEGIN
SET @strGroupBy = ''
END
----------------------------------------------------------------------------------------------------
DECLARE @strOrderBy nvarchar(500) --OrderBy 条件
IF @OrderBy IS NulL OR @OrderBy = '' --OrderBy 条件
BEGIN
SET @strOrderBy = ' ORDER BY ' + @PrimaryKeyFIEld + ' DESC'
END
ELSE
BEGIN
SET @strOrderBy = ' ORDER BY ' + @OrderBy
END
----------------------------------------------------------------------------------------------------
DECLARE @strsql nvarchar(max) --sql 语句
--计算总行数
IF @IsCount = 1
BEGIN
SET @strsql= 'SELECT Count (*) AS RecordCount FROM ' + @table + @strWhere + @strGroupBy
EXEC sp_executesql @strsql
RETURN
END
----------------------------------------------------------------------------------------------------
IF @PageNumber < 1 --第一页提高性能
BEGIN
SET @PageNumber = 1
END
IF @PageNumber = 1 BEGIN SET @strsql = 'SELECT top ' + str(@PageSize) + ' ' + @FIEld + ' FROM ' + @table + @strWhere + @strGroupBy + @strOrderBy EXEC sp_executesql @strsql RETURN END ---------------------------------------------------------------------------------------------------- --根据 sqlServer 2005 帮助得到下面的语句 DECLARE @STARTID nvarchar(50) DECLARE @ENDID nvarchar(50) SET @STARTID = convert(nvarchar(50),(@PageNumber - 1) * @PageSize + 1) SET @ENDID = convert(nvarchar(50),@PageNumber * @PageSize) SET @strsql = 'WITH MYtable AS (SELECT ROW_NUMBER() OVER (' + @strOrderBy + ') AS RowNumber,' + @FIEld + ' FROM '+ @table + @strWhere + @strGroupBy + ') SELECT * FROM MYtable WHERE RowNumber BETWEEN ' + @STARTID + ' AND ' + @ENDID EXEC sp_executesql @strsql -------------------------------------------------------------------------------------------------- END
总结以上是内存溢出为你收集整理的超强的分页存储过程 可用来各种查询全部内容,希望文章能够帮你解决超强的分页存储过程 可用来各种查询所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)