【原创】SQL分页查询存储过程

 1 -------------------------------------
 2 -----作者:张欣宇
 3 -----时间:2013-06-28
 4 -----简介:根据参数和条件分页查询
 5 -------------------------------------
 6 Create proc [dbo].[Up_PagingQueryByParameter]
 7 (
 8     ----- 表名或能查询到结果的SQL语句{SQL语句左右必须有括号例:(select * from tbl1)}
 9     @TableName varchar(max),
10     ----- 要查询的列名语句; 可空默认*
11     @ColumnName varchar(5000),
12     ----- 用来排序的列;  不可为空
13     @OrderByColumnName varchar(50),
14     ----- 排序desc(倒序5.4.3.2.1)或asc(正序1.2.3.4.5); 可空默认asc
15     @ShrtBy varchar(4),
16     ----- Where条件; 可空默认1=1
17     @Where varchar(5000),
18     ----- 每页显示数; 可空默认20
19     @PageShows int,
20     ----- 当前页数; 可空默认1
21     @CurrentPage int,
22     ----- 0为分页查询;其他为查询全部; 可空默认0
23     @IsPaging int
24 )
25 as
26 begin
27     ----- 参数检查及规范
28     if isnull(@Where,N‘‘)=N‘‘ set @Where = N‘1=1‘;
29     if isnull(@ColumnName,N‘‘)=N‘‘ set @ColumnName = N‘*‘;
30     if isnull(@PageShows,0)<1 set @PageShows = 20;
31     if isnull(@CurrentPage,0)<1 set @CurrentPage = 1;
32     if isnull(@ShrtBy,N‘‘)=N‘‘ set @ShrtBy = ‘asc‘;
33     if isnull(@IsPaging,0)<>1 set @IsPaging = 0;
34     ----- 定义
35     -- 拼接的SQL语句
36     declare @SqlStr nvarchar(max);
37     declare @SqlWithStr nvarchar(max);
38     -- 开始条数
39     declare @StartIndex int;
40     -- 结束条数
41     declare @EndIndex int;
42     ----- 赋值
43     set @StartIndex = (@CurrentPage-1)*@PageShows+1;
44     print(@CurrentPage);
45     print(@PageShows);
46     print(@StartIndex);
47     set @EndIndex = @CurrentPage*@PageShows;
48     print(@EndIndex);
49     set @OrderByColumnName=@OrderByColumnName+‘ ‘+@ShrtBy;
50     ----- 分页查询
51      set @SqlWithStr = N‘with temp as(select ROW_NUMBER() over(order by ‘+@OrderByColumnName+N‘) as RowNumber,‘+@ColumnName+N‘ from ‘+@TableName+N‘ as tableName where ‘+@Where+N‘)‘;
52     if(@IsPaging = 0)
53     begin
54         set @SqlStr = @SqlWithStr + N‘ select ‘+@ColumnName+N‘ from temp where temp.RowNumber between ‘+convert(nvarchar(20),@StartIndex)+N‘ and ‘+convert(nvarchar(20),@EndIndex)+N‘‘;
55         ---- print(@SqlStr);
56         exec(@SqlStr);
57         ----- 总数查询
58         set @SqlStr = @SqlWithStr + N‘ select count(*) as TotalNumber from temp‘;
59         ---- print(@SqlStr);
60         exec(@SqlStr);
61     end
62     else
63     begin
64         set @SqlStr = @SqlWithStr + N‘ select ‘+@ColumnName+N‘ from temp‘;
65         ---- print(@SqlStr);
66         exec(@SqlStr);
67     end
68 end
时间: 2024-08-24 00:59:43

【原创】SQL分页查询存储过程的相关文章

sql 分页查询

数据过多时sql中返回数据,开销大,用户还不一定会用到.这时使用sql分页查询,更具用户操作返回对应的数据就能极大程度提高效率. 分页有多种方法:top in.exist.row_number()等,在此只叙述相对高效的 max/top  分页方式 1.原始的 select * from dbo.pagetest where id >(select max(id) from (select top(9900) id from dbo.pagetest order by id)a) order b

SQL分页查询总结{转}

开发过程中经常遇到分页的需求,今天在此总结一下吧.简单说来方法有两种,一种在源上控制,一种在端上控制.源上控制把分页逻辑放在SQL层:端上控制一次性获取所有数据,把分页逻辑放在UI上(如GridView).显然,端上控制开发难度低,适于小规模数据,但数据量增大时性能和IO消耗无法接受:源上控制在性能和开发难度上较为平衡,适应大多数业务场景:除此之外,还可以根据客观情况(性能要求,源与端的资源占用等)在源和端之间加一层,应用特殊算法和技术进行处理.以下主要讨论源上,即SQL上的分页.分页的问题其实

SQLServer分页查询存储过程

项目中用到的SQLServer分页查询存储过程. [存储过程] create PROCEDURE prcPageResult -- 获得某一页的数据 -- @currPage int = 1,                         --当前页页码 (即Top currPage) @showColumn varchar(2000) = '*',           --需要得到的字段 (即 column1,column2,......) @strCondition varchar(200

SQL分页查询结果不一致

今天遇到了SQL分页查询结果不一致的情况,一看代码,原来是没加排序查询!!分页查询最好加排序,且以唯一性高的字段进行排序,如ID,时间等,以保持每页查询结果的准确! PS:又帮别人擦屁股!!

ADO调用分页查询存储过程

一.分页存储过程 ----------使用存储过程编写一个分页查询----------------------- set nocount off  --关闭SqlServer消息 --set nocount on  --开启SqlServer消息 gocreate proc usp_getMyStudentsDataByPage --输入参数@pagesize int=7,--每页记录条数@pageindex int=1,--当前要查看第几页的记录 --输出参数@recordcount int

SQL分页查询,纯Top方式和row_number()解析函数的使用及区别

听同事分享几种数据库的分页查询,自己感觉,还是需要整理一下MS SqlSever的分页查询的. Sql Sever 2005之前版本: select top 页大小 * from 表名 where id not in ( select top 页大小*(查询第几页-1) id from 表名 order by id ) order by id 例如: select top 10 * --10 为页大小 from [TCCLine].[dbo].[CLine_CommonImage] where

SQL Server 分页查询存储过程

1.低效的分页 SELECT TOP m-n+1 * FROM publish WHERE (id NOT IN (SELECT TOP n-1 id FROM publish)) 但这个存储过程有一个致命的缺点,就是它含有NOT IN字样.虽然我可以把它改造为: SELECT TOP 页大小 * FROM Table1 WHERE not exists (select * from (select top (页大小*页数) * from table1 order by id) b where

SQL分页查询

SQLServer 的数据分页: 假设现在有这样的一张表: CREATE TABLE test ( id int primary key not null identity, names varchar(20) ) 然后向里面插入大约1000条数据,进行分页测试 假设页数是10,现在要拿出第5页的内容,查询语句如下: --10代表分页的大小 select top 10 * from test where id not in ( --40是这么计算出来的:10*(5-1) select top 4

SQL 分页查询的四种方法

方法一 假设现在有这样的一张表: CREATE TABLE test ( id int primary key not null identity, names varchar(20) ) 然后向里面插入大约100条数据,进行分页测试 假设页数是10,现在要拿出第5页的内容,查询语句如下: --10代表分页的大小 select top 10 * from test where id not in ( --40是这么计算出来的:10*(5-1) select top 40 id from test