zoukankan      html  css  js  c++  java
  • SQL 高效的万能分页存储过程

    代码如下:

    USE [Blog]
    IF OBJECT_ID('Proc_Paging', 'P') IS NOT NULL    --删除同名存储过程
        DROP PROC Proc_Paging
    GO
    CREATE PROC Proc_Paging
        @TableFields NVARCHAR(512),
        @TableName NVARCHAR(512),
        @SqlWhere NVARCHAR(512),
        @OrderBy NVARCHAR(64),
        @PageIndex INT,
        @PageSize INT,
        @TotalCount INT OUTPUT
    AS
        DECLARE @SQL1 NVARCHAR(2048), @SQL2 NVARCHAR(2048)    --@SQL1和@SQL2最好设置为比较长的字符串,否则会因为SQL语句过长而导致执行失败
        --SET @SQL1 = N'SELECT TOP ' + CONVERT(VARCHAR(2), @PageSize) + ' * FROM (SELECT ROW_NUMBER() OVER(ORDER BY ' + @OrderBy + ') AS NID, ' + @TableFields + ' FROM ' + @TableName + ' WHERE ' + @SqlWhere + ') AS TmpTable WHERE TmpTable.NID > (@PageIndex - 1) * @PageSize SELECT @TotalCount = COUNT(1) FROM ' + @TableName + ' WHERE ' + @SqlWhere  --用TOP关键字进行筛选
        SET @SQL1 = N'SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY ' + @OrderBy + ') AS NID, ' + @TableFields + ' FROM ' + @TableName + ' WHERE ' + @SqlWhere + ') as TmpTable WHERE TmpTable.NID BETWEEN (@PageIndex - 1) * @PageSize + 1 AND @PageIndex* @PageSize SELECT @TotalCount = COUNT(1) FROM ' + @TableName + ' WHERE ' + @SqlWhere
        SET @SQL2 = N'@TableFields NVARCHAR(512),@TableName NVARCHAR(512),@SqlWhere NVARCHAR(512),@OrderBy NVARCHAR(64),@PageIndex INT,@PageSize INT,@TotalCount INT OUTPUT'
    EXEC SP_EXECUTESQL @SQL1, @SQL2, @TableFields, @TableName, @SqlWhere,@OrderBy,@PageIndex,@PageSize,@TotalCount OUTPUT
    PRINT @SQL1    --打印执行语句  
    
    GO    --测试用例
    DECLARE @Count INT = 0
    EXEC Proc_Paging '*', 'POSTS', 'PublishTime < GETDATE()', 'Id', 5, 10, @Count OUTPUT    --筛选发布时间小于当前时间的记录

    【注意点】:@SQL1和@SQL2最好设置为比较长的字符串,否则会因为SQL语句过长而导致执行失败

  • 相关阅读:
    java程序员从ThinkPad到Mac的使用习惯改变
    关于mybatis缓存配置详解
    log4j每天,每小时产生一日志文件
    $_SERVER常用
    curl抓取页面时遇到重定向的解决方法
    十三)CodeIgniter源码分析之Loader.php
    十二)CodeIgniter源码分析之Model.php
    十一)CodeIgniter源码分析之Controller.php
    十)CodeIgniter源码分析之Output.php
    九)CodeIgniter源码分析之Hook.php
  • 原文地址:https://www.cnblogs.com/feiyuhuo/p/9062203.html
Copyright © 2011-2022 走看看