• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

实现千万级数据的分页显示_sqlserver

sqlserver 搞代码 3年前 (2018-06-16) 248次浏览 已收录 0个评论

这是经我该写后的存储过程
———————————————————
ALTER       PROCEDURE usp_GetRecordFromPage
    @tblName       varchar(1000),        — 表名
    @SelectFieldName    varchar(4000),              — 要显示的字段名(不要加select)

http://www.gaodaima.com/35845.html实现千万级数据的分页显示_sqlserver

    @strWhere       varchar(4000),              — 查询条件(注意: 不要加 where)
    @OrderFieldName      varchar(255),               — 排序索引字段名
    @PageSize       int ,                 — 页大小
    @PageIndex      int = 1,                  — 页码
    @iRowCount      int output,                 — 返回记录总数
    @OrderType      bit = 0                  — 设置排序类型, 非 0 值则降序
          
AS

declare @strSQL    varchar(4000)       — 主语句
declare @strTmp    varchar(4000)        — 临时变量
declare @strOrder  varchar(400)        — 排序类型
declare @strRowCount    nvarchar(4000)      — 用于查询记录总数的语句

set @OrderFieldName=ltrim(rtrim(@OrderFieldName))

if @OrderType != 0
begin
    set @strTmp = ‘<(select min’
    set @strOrder = ‘ order by ‘ + @OrderFieldName +’ desc’
end
else
begin
    set @strTmp = ‘>(select max’
    set @strOrder = ‘ order by ‘ + @OrderFieldName +’ asc’
end

set @strSQL = ‘select top ‘ + str(@PageSize) + @SelectFieldName+’ from ‘
    + @tblName + ‘ where ‘ + @OrderFieldName + @strTmp + ‘(‘
    + right(@OrderFieldName,len(@OrderFieldName)-charindex(‘.’,@OrderFieldName)) + ‘) from (select top ‘ + str((@PageIndex-1)[email protected])
    + @OrderFieldName + ‘ from ‘ + @tblName  + @strOrder + ‘) as tblTmp)’
    + @strOrder

if @strWhere != ”
    set @strSQL = ‘select top ‘ + str(@PageSize) + @SelectFieldName+’ from ‘
        + @tblName + ‘ where ‘ + @OrderFieldName + @strTmp + ‘(‘
        + right(@OrderFieldName,len(@OrderFieldName)-charindex(‘.’,@OrderFieldName)) + ‘) from (select top ‘ + str((@PageIndex-1)[email protected])
        + @OrderFieldName + ‘ from ‘ + @tblName + ‘ where ‘ + @strWhere + ‘ ‘
        + @strOrder + ‘) as tblTmp) and ‘ + @strWhere + ‘ ‘ + @strOrder

if @PageIndex = 1
begin
    set @strTmp = ”
    if @strWhere != ”
        set @strTmp = ‘ where ‘ + @strWhere

    set @strSQL = ‘select top ‘ + str(@PageSize) + @SelectFieldName+’ from ‘
        + @tblName + @strTmp + ‘ ‘ + @strOrder
end

exec(@strSQL)
 
if @strWhere!=”
begin
  set @strRowCount = ‘select @iRowCount=count(*) from ‘ + @tblName+’ where ‘[email protected]
end
else
begin
  set @strRowCount = ‘select @iRowCount=count(*) from ‘ + @tblName
end

exec sp_executesql @strRowCount,N’@iRowCount int out’,@iRowCount out

欢迎大家阅读《实现千万级数据的分页显示_sqlserver,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址