MS SQL 分页存储过程
最近换了家新公司,但是新公司没有使用分页的存储过程。那我就自个写一个往项目上套 (效率怎么样就不怎么清楚没有详细的测试过)
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 分页存储过程的更多相关文章
- [转]关于SQL分页存储过程的分析
[转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用 ...
- Delphi调用SQL分页存储过程实例
Delphi调用SQL分页存储过程实例 (-- ::)转载▼ 标签: it 分类: Delphi相关 //-----下面是一个支持任意表的 SQL SERVER2000分页存储过程 //----分页存 ...
- 完整SQL分页存储过程(支持多表联接)
http://www.cnblogs.com/andiki/archive/2009/03/24/1420289.html Code/********************************* ...
- 真正通用的SQL分页存储过程
关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加 ...
- 关于SQL分页存储过程的分析
建 立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅 ...
- SQL - 分页存储过程
http://www.jb51.net/article/71193.htm http://www.webdiyer.com/utils/spgenerator/ create PROCEDURE [d ...
- 修改后的SQL分页存储过程,利用2分法,支持排序
/****** Object: StoredProcedure [dbo].[sys_Page_v3] Script Date: 08/13/2014 09:32:28 ******/ SET ANS ...
- sql分页存储过程比较
一,先创建一百万条数据 drop table #tmp create table #tmp ( id ,) primary key, name ) ) declare @i int begin ins ...
- MS SQL的存储过程
-- ============================================= -- Author: -- Create date: 2016-07-01 -- Descriptio ...
随机推荐
- impulse···········
impulse - Bing dictionary US['ɪm.pʌls]UK['ɪmpʌls] n.冲动:冲量:推动力:刺激 v.推动 网络脉冲:冲击 变形Plural Form:impulses ...
- fieldOfView
fieldOfView 属性 fieldOfView:Number 语言版本: ActionScript 3.0 运行时版本: Flash Player 10, AIR 1.5 为三维视野指定一个 ...
- 使用ASP.NET AJAX 从脚本中调用Web 服务的应用方法
技能点:通过编写WebService,在页面js中调用WebService来进行数据查询. 网站开发,有些时候需要使用js在页面动态生成一些内容,但还有些数据要通过查询数据库才能获取的. 但由于诸如主 ...
- python作业之用户管理程序
数据库的格式化如下 分别为姓名|密码|电话号码|邮箱|用户类型 admin|admin123.|28812341026|admin@126.com|1root|admin123.|1344566348 ...
- day9:vcp考试
Q161. An administrator wants to select a Host Power Management Policy for an ESXi 6.x host that will ...
- node.js压缩版 Windows安装
1.下载 下载地址:https://nodejs.org/zh-cn/download/ 选择相应的版本下载 2.解压缩 将文件解压到要安装的位置,并新建两个目录 node-global :npm全局 ...
- OrgChart 组织架构与PHP结合使用
一.OrgChart下载地址: https://github.com/dabeng/OrgChart 二.组织架构的表设计 CREATE TABLE `org_info` ( `id` int(11) ...
- Spring框架的事务管理相关的类和API
1. PlatformTransactionManager接口 -- 平台事务管理器.(真正管理事务的类).该接口有具体的实现类,根据不同的持久层框架,需要选择不同的实现类! 2. Transacti ...
- How to add libraries to “External Libraries” in WebStorm/PhpStorm/Intellij
Stack Overflow Questions Developer Jobs Tags Users Log In Sign Up Join Stack Overflow to learn, sh ...
- Codeforces Recycling Bottles 模拟
C. Recycling Bottles time limit per test: 2 seconds memory limit per test: 256 megabytes input: stan ...