您的位置:首页 > 数据库

高效分页 sql 存储过程 以及 执行

2017-06-10 09:28 357 查看
USE [MyData]

GO

/****** Object:  StoredProcedure [dbo].[P_GridViewPager]    Script Date: 2017/6/10 9:24:17 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE [dbo].[P_GridViewPager] (

    @recordTotal INT OUTPUT,            --输出记录总数

    @viewName VARCHAR(800),        --表名

    @fieldName VARCHAR(800) = '*',        --查询字段

    @keyName VARCHAR(200) = 'VG_ID',            --索引字段

    @pageSize INT = 20,                    --每页记录数

    @pageNo INT =1,                    --当前页

    @orderString VARCHAR(200),        --排序条件

    @whereString VARCHAR(800) = '1=1'        --WHERE条件

)

AS

BEGIN

     DECLARE @beginRow INT

     DECLARE @endRow INT

     DECLARE @tempLimit VARCHAR(200)

     DECLARE @tempCount NVARCHAR(1000)

     DECLARE @tempMain VARCHAR(1000)

     --declare @timediff datetime 

     

     set nocount on

     --select @timediff=getdate() --记录时间

     SET @beginRow = (@pageNo - 1) * @pageSize    + 1

     SET @endRow = @pageNo * @pageSize

     SET @tempLimit = 'rows BETWEEN ' + CAST(@beginRow AS VARCHAR) +' AND '+CAST(@endRow AS VARCHAR)

     

     --输出参数为总记录数

     SET @tempCount = 'SELECT @recordTotal = COUNT(*) FROM (SELECT '+@keyName+' FROM '+@viewName+' WHERE '+@whereString+') AS my_temp'

     EXECUTE sp_executesql @tempCount,N'@recordTotal INT OUTPUT',@recordTotal OUTPUT

       

     --主查询返回结果集

     SET @tempMain = 'SELECT * FROM (SELECT ROW_NUMBER() OVER (order by '+@orderString+') AS rows ,'+@fieldName+' FROM '+@viewName+' WHERE '+@whereString+') AS main_temp WHERE '+@tempLimit

     

     --PRINT @tempMain

     EXECUTE (@tempMain)

     --select datediff(ms,@timediff,getdate()) as 耗时 

     

     set nocount off

END

GO

declare @recordTotal int

EXEC [dbo].[P_GridViewPager] @recordTotal output,'VCL_GPSLOG_2015','*','VG_ID',20,1,'vg_id','SERIAL=''DBBG5808'''  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: