• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    三种SQL分页查询的存储过程代码
    复制代码 代码如下:

    --根据MAX(MIN)ID
    CREATE PROC [dbo].[proc_select_id]
    @pageindex int=1,--当前页数
    @pagesize int=10,--每页大小
    @tablename VARCHAR(50)='',--表名
    @fields VARCHAR(1000)='',--查询的字段集合
    @keyid VARCHAR(50)='',--主键
    @condition NVARCHAR(1000)='',--查询条件
    @orderstr VARCHAR(500),--排序条件
    @totalRecord BIGINT OUTPUT--总记录数
    AS
    IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC '
    IF ISNULL(@fields,N'')=N'' SET @fields=N'*'
    IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1'
    DECLARE @sql NVARCHAR(4000)
    --IF(@totalRecord IS NULL)
    --BEGIN
    SET @sql=N'SELECT @totalRecord=COUNT(*)'
    +N' FROM '+@tablename
    +N' WHERE '+@condition
    EXEC sp_executesql @sql,N'@totalRecord INT OUTPUT',@totalRecord OUTPUT
    --END
    IF(@pageindex=1)
    BEGIN
    SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@condition+N' '+@orderstr
    EXEC(@sql)
    END
    ELSE
    BEGIN
    DECLARE @operatestr CHAR(3),@comparestr CHAR(1)
    SET @operatestr='MAX'
    SET @comparestr='>'
    IF(@orderstr>'')
    BEGIN
    IF(CHARINDEX('desc',LOWER(@orderstr))>0)
    BEGIN
    SET @operatestr='MIN'
    SET @comparestr=''
    END
    END
    SET @sql=N'SELECT top '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@keyid+@comparestr
    +N'(SELECT '+@operatestr+N'('+@keyid+N') FROM '+@tablename+N' WHERE '+@keyid
    +N' IN (SELECT TOP '+STR((@pageindex-1)*@pagesize)+N' '+@keyid+N' FROM '+@tablename+N' WHERE '
    +@condition+N' '+@orderstr+N')) AND '+@condition+N' '+@orderstr
    EXEC(@sql)
    END
    GO


    --根据ROW_NUMBER() OVER
    CREATE PROC [dbo].[proc_select_page_row]
    @pageindex INT=1,--当前页数
    @pagesize INT=10,--每页大小
    @tablename VARCHAR(50)='',--表名
    @fields VARCHAR(1000)='*',--查询的字段集合
    @keyid VARCHAR(50)='',--主键
    @condition NVARCHAR(1000)='',--查询条件
    @orderstr VARCHAR(500),--排序条件
    @totalRecord BIGINT OUTPUT--总记录数
    AS
    IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC '
    IF ISNULL(@fields,N'')=N'' SET @fields=N'*'
    IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1'
    DECLARE @sql NVARCHAR(4000)
    -- IF @totalRecord IS NULL
    -- BEGIN
    SET @sql=N'SELECT @totalRecord=COUNT(*)'
    +N' FROM '+@tablename
    +N' WHERE '+@condition
    EXEC sp_executesql @sql,N'@totalRecord bigint OUTPUT',@totalRecord OUTPUT
    --END
    IF(@pageindex=1)
    BEGIN
    SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@condition+N' '+@orderstr
    EXEC(@sql)
    END
    ELSE
    BEGIN
    DECLARE @StartRecord INT
    SET @StartRecord = (@pageindex-1)*@pagesize + 1
    SET @sql=N'SELECT * FROM (SELECT ROW_NUMBER() OVER ('+ @orderstr +N') AS rowId,'+@fields+N' FROM '+ @tablename+N') AS T WHERE rowId>='+STR(@StartRecord)+N' and rowId='+STR(@StartRecord + @pagesize - 1)
    EXEC(@sql)
    END
    GO


    --根据TOP ID
    CREATE PROC [dbo].[proc_select_page_top]
    @pageindex INT=1,--当前页数
    @pagesize INT=10,--每页大小
    @tablename VARCHAR(50)='',--表名
    @fields VARCHAR(1000)='',--查询的字段集合
    @keyid VARCHAR(50)='',--主键
    @condition NVARCHAR(1000)='',--查询条件
    @orderstr VARCHAR(500),--排序条件
    @totalRecord BIGINT OUTPUT--总记录数
    AS
    IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC '
    IF ISNULL(@fields,N'')=N'' SET @fields=N'*'
    IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1'
    DECLARE @sql NVARCHAR(4000)
    --IF(@totalRecord IS NULL)
    --BEGIN
    SET @sql=N'SELECT @totalRecord=COUNT(*)'
    +N' FROM '+@tablename
    +N' WHERE '+@condition
    EXEC sp_executesql @sql,N'@totalRecord INT OUTPUT',@totalRecord OUTPUT
    --END
    IF(@pageindex=1)
    BEGIN
    SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@condition+N' '+@orderstr
    EXEC(@sql)
    END
    ELSE
    BEGIN
    SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@keyid
    +N' NOT IN(SELECT TOP '+STR((@pageindex-1)*@pagesize)+N' '+@keyid+N' FROM '
    +@tablename+N' WHERE '+@condition+N' '+@orderstr+N') AND '+@condition+N' '+@orderstr
    EXEC(@sql)
    END
    GO
    您可能感兴趣的文章:
    • 五种SQL Server分页存储过程的方法及性能比较
    • SQL Server 分页查询通用存储过程(只做分页查询用)
    • sqlserver2005利用临时表和@@RowCount提高分页查询存储过程性能示例分享
    • 深入sql server 2005 万能分页存储过程的详解
    • 基于Sql Server通用分页存储过程的解决方法
    • mssql 高效的分页存储过程分享
    • SQL Server 2005通用分页存储过程及多表联接应用
    • MSSQL MySQL 数据库分页(存储过程)
    • SQL通用存储过程分页,支持多表联合
    • SQL分页查询存储过程代码分享
    上一篇:SQLServer中数据库文件的存放方式,文件和文件组
    下一篇:理解SQL SERVER中的逻辑读,预读和物理读
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    三种SQL分页查询的存储过程代码 三种,SQL,分页,查询,的,存储,