最近换了家新公司,但是新公司没有使用分页的存储过程。那我就自个写一个往项目上套 (效率怎么样就不怎么清楚没有详细的测试过)

CREATE PROCEDURE [dbo].[pro_common_pageList]
(
@tab NVARCHAR(MAX) ,---表名
@PrimaryKey VARCHAR(100) , --主键ID
@strFld NVARCHAR(MAX) , --字段字符串
@strWhere NVARCHAR(MAX) = ' ' , --where条件
@IsDistinct BIT ,
@PageIndex INT , --页码
@PageSize INT , --每页容纳的记录数
@Order VARCHAR(255) = ' ' , --排序字段及规则,不用加order by
@Sort VARCHAR(20) = 'desc' ,
@TotalCount INT OUTPUT --总记录数
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @strSql VARCHAR(MAX);
IF @strFld IS NULL
OR @strFld = ' '
BEGIN
SET @strFld = '*';
END;
IF @Order IS NULL
OR @Order = ' '
BEGIN
SET @Order = @PrimaryKey;
END;
--计算总记录数
DECLARE @sqlRecordCount NVARCHAR(MAX); --得到总记录条数的语句
DECLARE @recordCount INT; --保存总记录条数的变量
DECLARE @distinct NVARCHAR(20)= ' ';
IF @IsDistinct = 1
BEGIN
SET @distinct = ' DISTINCT ';
END;
SET @sqlRecordCount = N'SELECT @recordCount=COUNT(1) FROM (SELECT '
+ @distinct + ' ' + @strFld + ' FROM ' + @tab + ' WHERE 1=1 '
+ @strWhere + ' ) AS TEMPTABLE';
EXEC sp_executesql @sqlRecordCount, N'@recordCount int output',
@recordCount OUTPUT;
SET @TotalCount = @recordCount; --数据查询
--当@PageIndex=1,使用TOP效率较快
IF @PageIndex = 1
BEGIN
SET @strSql = 'SELECT ' + @distinct + ' TOP ' + STR(@PageSize)
+ ' ' + @strFld + ',0 AS rownum FROM ' + @tab
+ ' WHERE 1=1 ' + @strWhere + ' ORDER BY ' + @Order + ' '
+ @Sort;
END;
ELSE
BEGIN
SET @strSql = 'SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY ' + @PrimaryKey
+ ') AS rownum FROM ';
--是否去重:1去重
IF @IsDistinct = 1
BEGIN
SET @strSql = @strSql + ' (SELECT DISTINCT ' + @strFld
+ ' FROM ' + @tab + ' WHERE 1=1 ' + @strWhere
+ ' ) AS S ';
END;
ELSE
BEGIN
SET @strSql = @strSql + ' ' + @tab + ' WHERE 1=1 '
+ @strWhere;
END;
SET @strSql = @strSql
+ ') AS Dwhere WHERE Dwhere.rownum BETWEEN '
+ CAST(( ( @PageIndex - 1 ) * @PageSize ) + 1 AS NVARCHAR(20));
SET @strSql = @strSql + ' AND '
+ CAST(( @PageIndex * @PageSize ) AS NVARCHAR(20));
SET @strSql = @strSql + ' ORDER BY ' + @Order + ' ' + @Sort;
END;
PRINT(@strSql)
EXEC (@strSql);
SET NOCOUNT OFF;
END;

MS SQL 分页存储过程的更多相关文章

  1. [转]关于SQL分页存储过程的分析

    [转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用 ...

  2. Delphi调用SQL分页存储过程实例

    Delphi调用SQL分页存储过程实例 (-- ::)转载▼ 标签: it 分类: Delphi相关 //-----下面是一个支持任意表的 SQL SERVER2000分页存储过程 //----分页存 ...

  3. 完整SQL分页存储过程(支持多表联接)

    http://www.cnblogs.com/andiki/archive/2009/03/24/1420289.html Code/********************************* ...

  4. 真正通用的SQL分页存储过程

    关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加 ...

  5. 关于SQL分页存储过程的分析

    建 立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅 ...

  6. SQL - 分页存储过程

    http://www.jb51.net/article/71193.htm http://www.webdiyer.com/utils/spgenerator/ create PROCEDURE [d ...

  7. 修改后的SQL分页存储过程,利用2分法,支持排序

    /****** Object: StoredProcedure [dbo].[sys_Page_v3] Script Date: 08/13/2014 09:32:28 ******/ SET ANS ...

  8. sql分页存储过程比较

    一,先创建一百万条数据 drop table #tmp create table #tmp ( id ,) primary key, name ) ) declare @i int begin ins ...

  9. MS SQL的存储过程

    -- ============================================= -- Author: -- Create date: 2016-07-01 -- Descriptio ...

随机推荐

  1. android笔记:BroadcastReceiver

    android允许应用程序自由地发送和接收广播. 广播是通过Intent进行数据传递的.接收广播则通过Broadcast Receiver(广播接收器)实现. 广播分为:标准广播和有序广播. 标准广播 ...

  2. MyEclipse/eclipse 添加作者、注释、版本、时间等

    preferences>>java>>code style>>code templates>>comments>>找到相应的编辑即可

  3. Python3 exec 函数

    Python3 exec 函数  Python3 内置函数 描述 exec 执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码. 语法 以下 ...

  4. 4. Median of Two Sorted Arrays(Array; Divide-and-Conquer)

    There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...

  5. php 中的信号处理

    首先我们需要了解几个函数 pcntl_signal   安装信号处理器,也就是当指定信号发生时,调用函数. pcntl_alarm   指定秒数后向进程发送SIGALRM信号. posix_getpi ...

  6. PowerDesigner :

    P:是否为主键: F:是否为外键: M:表示强制非空: D:是否在模型中显示 修改样式.字体.颜色.等:Tools->Display Preferences->Format-> Po ...

  7. Laravel Nginx 站点配置文件(Homestead)

    server {     listen 80;     listen 443 ssl http2;     server_name fmtmis.local;     root "/home ...

  8. vue.js vue-cli 中解决 axios 跨域调用的问题

    修改 /config/index.js 文件如下: proxyTable: { '/api': { target: 'http://chifan.local', changeOrigin: true, ...

  9. connect strings sql server

    https://www.connectionstrings.com/sql-server/ Server=myServerAddress[,port];Database=myDataBase;User ...

  10. python panda库自动去重

    http://blog.csdn.net/xinxing__8185/article/details/48022401