sql server 纯sql语句分页 存储过程 返回结果集及页总数等
来源:互联网 发布:在code.org学编程 编辑:程序博客网 时间:2024/05/16 11:55
经常要对数据库中的数据进行大量的查询,特别是业务后台,但是EF等提供的语句应用起来可能看起来复杂、臃肿,我们需要借助SQL语句、或者存储过程来取得结果
1、.net EF 定义参数
using (YouEntites db = new YouEntites()) { var pageIndex = new System.Data.SqlClient.SqlParameter { ParameterName = "@pageIndex", Value = pageNum }; var pageSize = new System.Data.SqlClient.SqlParameter { ParameterName = "@pageSize", Value = rowPerPage }; var userid = new System.Data.SqlClient.SqlParameter { ParameterName = "@userid", Value = userId }; var totalRecord = new SqlParameter { ParameterName = "@totalRecord", Value = recordCount, Direction = ParameterDirection.Output //Direction = ParameterDirection.ReturnValue; }; var TotalPage = new SqlParameter { ParameterName = "@TotalPage", Value = totalPage, Direction = ParameterDirection.Output //Direction = ParameterDirection.ReturnValue; }; var start = new System.Data.SqlClient.SqlParameter { ParameterName = "@start", Value = startTime }; var end = new System.Data.SqlClient.SqlParameter { ParameterName = "@end", Value = endTime }; System.Data.SqlClient.SqlParameter[] parm = { userid, totalRecord, TotalPage, start, end, pageSize, pageIndex }; try { var results = db.Database.SqlQuery<Cost>("exec Query @userid,@totalRecord Output, @TotalPage Output,@start,@end,@pageSize,@pageIndex", parm); List<Cost> list = results.ToList(); recordCount = Convert.ToInt32(totalRecord.Value); totalPage = Convert.ToInt32(TotalPage.Value); return list; } catch (Exception ex) { Console.Write(ex.Message); }值得注意的是
var TotalPage = new SqlParameter { ParameterName = "@TotalPage", Value = totalPage, Direction = ParameterDirection.Output //Direction = ParameterDirection.ReturnValue; };
此参数为引用参数,注意!相当于一个存储过程要传出多个变量(.NET EF code first有个缺陷,不能返回多个返回集,但是可以返回除一个返回查询集以外的多个引用参数;但是DB First ,EF自动生成的模型edmx的时候是可以取得多个查询集的)
2、存储过程:
CREATE PROCEDURE [dbo].[Query]@userid int, @totalRecord int OUTPUT, @TotalPage int OUTPUT, @start datetime, @end datetime, @pageSize int, @pageIndex intWITH EXEC AS CALLERASbeginselect @totalRecord=count(*) from Cost where Users_ids in(@userid) and BackTime between @start and @end and InSuccess=1 and PaySuccess=1;--计算总页数select @TotalPage=CEILING((@totalRecord+0.0)/@pageSize)--处理页数超出范围情况 if @pageIndex<=0 Set @pageIndex = 1; if @pageIndex>@TotalPage Set @pageIndex = @TotalPage; --处理开始点和结束点 Declare @StartRecord int; Declare @EndRecord int; set @StartRecord = (@pageIndex-1)*@PageSize + 1 set @EndRecord = @StartRecord + @pageSize - 1select * from( select * ,ROW_NUMBER() over(order by BackTime desc) as "No." from cost where Users_ids in(@userid) --后接其它条件) as t where t."No." between @StartRecord and @EndRecord endGO注意分页的处理
3、关于分页的一些引述
常用的分页方式有:
select top 和select not in
select top 和 select max(列键)
select top和中间变量
利用Row_number() 此方法
利用临时表及Row_number
所非本人的测试,其针对较大量的数据其效果表现如下:
测试结果显示:select max >row_number>not in>临时表>中间变量
一般选择row_number方式。
参见:
http://q.cnblogs.com/q/56836/
http://www.cnblogs.com/lli0077/archive/2008/09/03/1282862.html
0 0
- sql server 纯sql语句分页 存储过程 返回结果集及页总数等
- jdbc 调用 sql server 的存储过程时“该语句没有返回结果集”的解决方法
- jdbc 调用 sql server 的存储过程时“该语句没有返回结果集”的解决方法
- jdbc 调用 sql server 的存储过程时“该语句没有返回结果集”的解决方法
- java sql server 存储过程 com.microsoft.sqlserver.jdbc.SQLServerException: 该语句没有返回结果集。
- Oracle 存储过程 动态SQL 语句 返回结果集
- Mysql 动态sql语句返回结果集-存储过程
- SQL server 的存储过程返回结果集很简单
- SQL分页语句及简单的SQL分页存储过程
- 在JDBC中调用SQL Server中的存储过程时出现异常:该语句没有返回结果集。
- 存储过程分页Sql语句
- 本站原创sql server 2005 分页存储过程(同时得到记录总数)及其运用
- MS SQL Server分页通用存储过程(获取每一页和记录总数)
- SQL Server 分页存储过程
- 分页存储过程(SQL Server)
- SQL Server 分页存储过程
- SQL Server 分页存储过程
- SQL Server 分页存储过程
- SQL Server 2014数据库远程访问设置方法
- [持续更新]SCM
- SQL语句总结
- 让IIS支持dat、apk等类型文件下载
- git学习二——多分支的git管理
- sql server 纯sql语句分页 存储过程 返回结果集及页总数等
- HTML5-表格元素
- 自定义ProgressDialog
- 原子访问(Atomic Access)
- Flask总结(一)
- 产品助理实习day2
- Spring AOP 代理对象的生成 part3
- 解析 JSON 格式数据
- 一段项目开发时候用的调试代码 二 --代码分析器(基于表驱动直接访问)