SqlServer存储过程实现分页
- 格式:pdf
- 大小:331.42 KB
- 文档页数:4
SQLserver分页的4种⽅法⽰例(很全⾯)这篇博客讲的是SQL server的分页⽅法,⽤的SQL server 2012版本。
下⾯都⽤pageIndex表⽰页数,pageSize表⽰⼀页包含的记录。
并且下⾯涉及到具体例⼦的,设定查询第2页,每页含10条记录。
⾸先说⼀下SQL server的分页与MySQL的分页的不同,mysql的分页直接是⽤limit (pageIndex-1),pageSize就可以完成,但是SQL server 并没有limit关键字,只有类似limit的top关键字。
所以分页起来⽐较⿇烦。
SQL server分页我所知道的就只有四种:三重循环;利⽤max(主键);利⽤row_number关键字,offset/fetch next关键字(是通过搜集⽹上的其他⼈的⽅法总结的,应该⽬前只有这四种⽅法的思路,其他⽅法都是基于此变形的)。
要查询的学⽣表的部分记录⽅法⼀:三重循环思路先取前20页,然后倒序,取倒序后前10条记录,这样就能得到分页所需要的数据,不过顺序反了,之后可以将再倒序回来,也可以不再排序了,直接交给前端排序。
还有⼀种⽅法也算是属于这种类型的,这⾥就不放代码出来了,只讲⼀下思路,就是先查询出前10条记录,然后⽤not in排除了这10条,再查询。
代码实现-- 设置执⾏时间开始,⽤来查看性能的set statistics time on ;-- 分页查询(通⽤型)select *from (select top pageSize *from (select top (pageIndex*pageSize) *from studentorder by sNo asc ) -- 其中⾥⾯这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。
as temp_sum_studentorder by sNo desc ) temp_orderorder by sNo asc-- 分页查询第2页,每页有10条记录select *from (select top 10 *from (select top 20 *from studentorder by sNo asc ) -- 其中⾥⾯这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。
SQLServer⽤⾏号(函数,ROW_NUMBER()over())实现分页功能由于MySQL与Oracle中⼀般可以借助内置函数直接输出表记录的序号,SQLServer2000没有提供这种函数,新版SQLServer2005终于提供了⼀种:row_number() over(order by 表字段)的函数实现了该功能,在此将⼀般实现⽅法select * from (select uid,mobile,email,nickname,ROW_NUMBER() over (order by nickname desc) as sort from u_user) as u_tempwhere sort>=6 and sort<=9简单的说row_number()从1开始,为每⼀条分组记录返回⼀个数字,这⾥的ROW_NUMBER() OVER (ORDER BY nickname DESC)是先把nickname列降序,再为降序以后每没条nickname记录返回⼀个序号。
nickname sort1700 61500 71085 8710 9注:ORDER BY Uid,根据ES_USER表中Uid来进⾏排序;row_number() 、Over(order by XXX [desc/asc])这两个函数⼀定是同时存在的。
语法: select top 5 * from( select row_number() over(order by 字段名) as 字段别名 from 表名) 别名 where 字段别名<=5row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表⽰根据COL1分组,在分组内部根据 COL2排序,⽽此函数计算的值就表⽰每组内部排序后的顺序编号(组内连续的唯⼀的)SQL脚本:SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee。
sqlserver mybatis分页查询语句SQLServer和Mybatis是常用的数据库和持久层框架,很多开发者在使用这两者进行数据操作时,都会遇到需要进行分页查询的情况。
本文将以"[sqlserver mybatis分页查询语句]"为主题,为读者详细介绍如何使用SQLServer和Mybatis进行分页查询,并提供一步一步的操作指南。
第一步:了解SQLServer的分页查询语法在使用SQLServer进行分页查询时,我们可以通过使用`ROW_NUMBER()`函数和`OFFSET FETCH`子句来实现。
具体的语法如下:sqlSELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY column ASC) AS rownum, *FROM table_name) AS tempWHERE rownum BETWEEN start_index AND end_index;其中,`ROW_NUMBER()`函数用于为每一行结果添加一个序号,`AS rownum`将该序号命名为"rownum",`table_name`是我们要查询的表名,`column`是我们要进行排序的列名,`start_index`和`end_index`分别是数据的起始索引和结束索引。
第二步:创建Mybatis的分页查询语句在Mybatis中,我们需要创建XML文件来定义我们的SQL语句。
首先,我们需要在XML文件中定义我们的查询语句和参数:xml<select id="selectByPage" resultType="yourResultType"> SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY column ASC) AS rownum, *FROM your_table) AS tempWHERE rownum BETWEEN #{start} AND #{end};</select>其中,`id`属性是该查询语句的唯一标识符,`resultType`属性是查询结果的类型,`start`和`end`是我们的参数。
数据库分页SQL语句博客分类:数据库数据库分页语句SQL Server--------------------------------------------------------------------------------- 从数据库表中的第M条记录开始取N条记录,利用Top关键字:注意如果Select语句中既有top,又有order by,则是从排序好的结果集中选择:SELECT *FROM ( SELECT Top N *FROM (SELECT Top (M + N - 1) * FROM 表名称 Order by 主键 desc) t1 ) t2 Order by 主键 asc例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:SELECT *FROM ( SELECT TOP 20 *FROM (SELECT TOP 29 * FROM Sys_option order by sys_id desc) t1) t2Order by sys_id ascOralce数据库--------------------------------------------------------------------------------从数据库表中第M条记录开始检索N条记录SELECT *FROM (SELECT ROWNUM r,t1.* From 表名称 t1 where rownum < M + N) t2where t2.r >= M例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下:SELECT *FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum < 30 ) t2Where t2.R >= 10如果你对Oracle数据库分页不是很熟悉的话,本页后面有专门对Oracle分页技术的讲解。
sqlserver 2008 分页方法### SQL Server 2008 分页方法在数据库应用开发中,分页技术是一种常用的手段,它可以帮助我们提高数据检索的效率,减少内存消耗,并且提升用户体验。
SQL Server 2008 提供了多种分页方法,下面将详细介绍几种在SQL Server 2008 中实现分页的技术。
#### 1.使用`ROW_NUMBER()``ROW_NUMBER()` 是SQL Server 2008 中最常用的分页方法之一。
它会为结果集中的每一行分配一个唯一的连续整数。
```sql-- 假设要查询的表名为YourTable,排序字段为SomeColumnSELECT *FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY SomeColumn) AS RowNumFROM YourTable) AS PagedTableWHERE RowNum BETWEEN @StartRow AND @EndRow;```在这里,`@StartRow` 和`@EndRow` 是变量,代表你要查询的页码范围。
#### 2.使用`TOP` 和`OFFSET`虽然`TOP` 子句在SQL Server 2005 中已经存在,但`OFFSET` 关键字是在SQL Server 2012 中引入的。
不过,通过某种方式,我们可以在SQL Server 2008 中模拟这种语法。
```sql-- 假设要查询的页码为PageNumber,每页显示的记录数为PageSize SELECT *FROM YourTableORDER BY SomeColumnOFFSET ((@PageNumber - 1) * @PageSize) ROWSFETCH NEXT @PageSize ROWS ONLY;```请注意,这里的`OFFSET` 和`FETCH NEXT` 语法在SQL Server 2008 中不能直接使用,这里只是展示可能的替代方式。
SQLServer存储过程语法及实例Transact-SQL中的存储过程,⾮常类似于Java语⾔中的⽅法,它可以重复调⽤。
当存储过程执⾏⼀次后,可以将语句缓存中,这样下次执⾏的时候直接使⽤缓存中的语句。
这样就可以提⾼存储过程的性能。
Ø 存储过程的概念存储过程Procedure是⼀组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,⽤户通过指定存储过程的名称并给出参数来执⾏。
存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。
由于存储过程在创建时即在数据库服务器上进⾏了编译并存储在数据库中,所以存储过程运⾏要⽐单个的SQL语句块要快。
同时由于在调⽤时只需⽤提供存储过程名和必要的参数信息,所以在⼀定程度上也可以减少⽹络流量、简单⽹络负担。
1、存储过程的优点A、存储过程允许标准组件式编程存储过程创建后可以在程序中被多次调⽤执⾏,⽽不必重新编写该存储过程的SQL语句。
⽽且数据库专业⼈员可以随时对存储过程进⾏修改,但对应⽤程序源代码却毫⽆影响,从⽽极⼤的提⾼了程序的可移植性。
B、存储过程能够实现较快的执⾏速度如果某⼀操作包含⼤量的T-SQL语句代码,分别被多次执⾏,那么存储过程要⽐批处理的执⾏速度快得多。
因为存储过程是预编译的,在⾸次运⾏⼀个存储过程时,查询优化器对其进⾏分析、优化,并给出最终被存在系统表中的存储计划。
⽽批处理的T-SQL语句每次运⾏都需要预编译和优化,所以速度就要慢⼀些。
C、存储过程减轻⽹络流量对于同⼀个针对数据库对象的操作,如果这⼀操作所涉及到的T-SQL语句被组织成⼀存储过程,那么当在客户机上调⽤该存储过程时,⽹络中传递的只是该调⽤语句,否则将会是多条SQL语句。
从⽽减轻了⽹络流量,降低了⽹络负载。
D、存储过程可被作为⼀种安全机制来充分利⽤系统管理员可以对执⾏的某⼀个存储过程进⾏权限限制,从⽽能够实现对某些数据访问的限制,避免⾮授权⽤户对数据的访问,保证数据的安全。
SqlServer存储过程详解SqlServer存储过程详解1.创建存储过程的基本语法模板:if (exists (select*from sys.objects where name ='pro_name'))drop proc pro_namegocreate proc pro_name@param_name param_type [=default_value]asbeginsql语句endps:[]表⽰⾮必写内容。
sys.objects存储的是本数据库中的信息,不仅仅存储表名,还有存储过程名、视图名、触发器等等。
例如:1if (exists (select*from sys.objects where name ='USP_GetAllUser'))2drop proc USP_GetAllUser3go4create proc USP_GetAllUser5@UserId int=16as7set nocount on;8begin9select*from UserInfo where Id=@UserId10endps:SQL Server 实⽤⼯具将 GO 解释为应将当前的 Transact-SQL 批处理语句发送给 SQL Server 的信号。
当前批处理语句是⾃上⼀ GO 命令后输⼊的所有语句,若是第⼀条 GO 命令,则是从特殊会话或脚本的开始处到这条 GO 命令之间的所有语句。
2.调⽤⽅法:exec P_GetAllUser 2;ps:⼀般在执⾏存储过程是,最好加上架构名称,例如 P_GetAllUser 这样可以可以减少不必要的系统开销,提⾼性能。
因为如果在存储过程名称前⾯没有加上架构名称,SQL SERVER ⾸先会从当前数据库sys schema(系统架构)开始查找,如果没有找到,则会去其它schema查找,最后在dbo架构(系统管理员架构)⾥⾯查找。
sqlserver select 中使用存储过程SQL Server中使用存储过程是一种提高数据库性能和代码重用性的技术。
在查询中使用存储过程可以将一组SQL语句封装在一个单元中,并且可以将参数传递给存储过程。
下面是一些关于在SQL Server中使用存储过程的详细信息。
1. 存储过程的定义和使用:在SQL Server中创建和使用存储过程非常简单。
可以使用CREATE PROCEDURE语句创建存储过程,并使用EXECUTE或EXEC语句执行存储过程。
存储过程可以包含输入参数、输出参数和返回值。
以下是一个简单的存储过程的示例:CREATE PROCEDURE GetCustomersByCity@City VARCHAR(255)ASBEGINSELECT * FROM Customers WHERE City = @CityEND在上面的示例中,我们创建了一个名为GetCustomersByCity的存储过程,它接收一个City参数,并在Customers表中选择所有匹配该城市的客户。
下面是如何执行该存储过程的示例:EXEC GetCustomersByCity 'London'通过执行上面的语句,存储过程将返回所有位于伦敦的客户。
2. 存储过程的优点:使用存储过程有以下几个优点:- 提高性能:存储过程在服务器端执行,减少了网络传输量,提高了查询的执行速度。
此外,存储过程还可以进行查询优化和索引优化,进一步提高查询性能。
- 代码重用:可以将一些常用的查询逻辑封装在存储过程中,在不同的应用程序中重复使用。
这样可以减少代码量,提高开发效率。
- 安全性:存储过程可以设置权限,只有有权限的用户才能执行存储过程。
这样可以提高数据的安全性。
- 数据一致性:存储过程可以执行一系列的操作,保证数据的一致性。
例如,在一个存储过程中可以同时更新多个表,保证数据的完整性。
3. 存储过程参数的使用:存储过程可以接收输入参数、输出参数和返回值。
sqlserver+支持多表联合查询分页存储过程CREATE PROCEDURE usp_PagingLarge@TableNames VARCHAR(300), --表名,可以是多个表,但不能用别名@PrimaryKey VARCHAR(100), --主键,可以为空,但@Order 为空时该值不能为空@Fields VARCHAR(350), --要取出的字段,可以是多个表的字段,可以为空,为空表示select *@PageSize INT, --每页记录数@CurrentPage INT, --当前页,0表示第1页@Filter VARCHAR(200) = '', --条件,可以为空,不用填 where @Group VARCHAR(200) = '', --分组依据,可以为空,不用填group by@Order VARCHAR(200) = '', --排序,可以为空,为空默认按主键升序排列,不用填 order by@RecordCount int = 0 outputASBEGINDECLARE @SortColumn VARCHAR(200)DECLARE @Operator CHAR(2)DECLARE @SortTable VARCHAR(200)DECLARE @SortName VARCHAR(200)DECLARE @TmpSelect NVarchar(200)IF @Fields = ''SET @Fields = '*'IF @Filter = ''SET @Filter = 'WHERE 1=1'ELSESET @Filter = 'WHERE ' + @FilterSET @Group = 'GROUP BY ' + @GroupIF @Order <> ''BEGINDECLARE @pos1 INT, @pos2 INTSET @Order = REPLACE(REPLACE(@Order, ' asc', ' ASC'), ' desc', ' DESC')IF CHARINDEX(' DESC', @Order) > 0IF CHARINDEX(' ASC', @Order) > 0BEGINIF CHARINDEX(' DESC', @Order) < CHARINDEX(' ASC', @Order)SET @Operator = '<='ELSESET @Operator = '>='ENDELSESET @Operator = '<='ELSESET @Operator = '>='SET @SortColumn = REPLACE(REPLACE(REPLACE(@Order, ' ASC', ''), ' DESC', ''), ' ', '')SET @pos1 = CHARINDEX(',', @SortColumn)IF @pos1 > 0SET @SortColumn = SUBSTRING(@SortColumn, 1, @pos1-1) SET @pos2 = CHARINDEX('.', @SortColumn)IF @pos2 > 0BEGINSET @SortTable = SUBSTRING(@SortColumn, 1, @pos2-1)SET @SortName = SUBSTRING(@SortColumn, @pos2+1, @pos1-@pos2-1)ELSESET @SortName = SUBSTRING(@SortColumn, @pos2+1, LEN(@SortColumn)-@pos2)ENDELSEBEGINSET @SortTable = @TableNamesSET @SortName = @SortColumnENDENDELSEBEGINSET @SortColumn = @PrimaryKeySET @SortTable = @TableNamesSET @SortName = @SortColumnSET @Order = @SortColumnSET @Operator = '>='ENDDECLARE @type varchar(50)DECLARE @prec intSELECT@type=/doc/e313809023.html,,@prec=c.precFROM sysobjects oJOIN syscolumns c on o.id=c.idJOIN systypes t on c.xusertype=t.xusertypeWHERE /doc/e313809023.html, = @SortTable AND /doc/e313809023.html, = @SortNameIF CHARINDEX('char', @type) > 0SET @type = @type + '(' + CAST(@prec AS varchar) +')'DECLARE @T opRows INTSET @TopRows = @PageSize * @CurrentPage + 1print @TopRowsprint @OperatorEXEC('DECLARE @SortColumnBegin ' + @type + 'SET ROWCOUNT ' + @T opRows + 'SELECT @SortColumnBegin=' + @SortColumn + ' FROM ' + @TableNames + ' ' + @Filter + ' ' + @Group + ' ORDER BY ' + @Order + 'SET ROWCOUNT ' + @PageSize + 'SELECT ' + @Fields + ' FROM ' + @TableNames + ' ' + @Filter + ' AND ' + @SortColumn + '' + @Operator + '@SortColumnBegin ' + @Group + ' ORDER BY ' + @Order + ' ')DECLARE @str_Count_SQL nvarchar(500)SET @str_Count_SQL= 'SELECT @TotalCount=count('+@PrimaryKey+') FROM ' + @TableNames + ' ' + @FilterEXEC sp_executesql @str_Count_SQL,N'@TotalCount int=0 output',@RecordCount outputEndGO150********。
mybatis sqlserver分页查询语句摘要:一、前言二、MyBatis简介三、SQL Server分页查询四、MyBatis与SQL Server分页查询结合五、总结正文:一、前言MyBatis是一个优秀的持久层框架,它可以简化复杂的数据库操作,提高开发效率。
本文将介绍如何使用MyBatis进行SQL Server分页查询。
二、MyBatis简介MyBatis是一个基于Java的持久层框架,它支持定制化SQL、存储过程以及高级映射。
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,可以让开发者专注于SQL本身,提高了开发效率。
三、SQL Server分页查询在SQL Server中,可以使用OFFSET和FETCH NEXT关键字进行分页查询。
以下是一个简单的示例:```SELECT * FROM table_nameOFFSET 0 ROWSFETCH NEXT 10 ROWS ONLY;```这个查询语句将返回table_name表中第11到20行的数据。
四、MyBatis与SQL Server分页查询结合要实现MyBatis与SQL Server分页查询的结合,需要进行以下步骤:1.配置MyBatis与SQL Server的连接。
2.创建一个Mapper接口,定义分页查询的方法。
3.在Mapper接口的实现类中,编写SQL Server分页查询的SQL语句。
4.在Service层调用Mapper接口的方法,实现分页查询。
以下是一个简单的示例:```java// Mapper接口public interface MyMapper {List<MyEntity> findAllByPage(int pageNum, int pageSize);}// Mapper接口的实现类public class MyMapperImpl implements MyMapper {@Overridepublic List<MyEntity> findAllByPage(int pageNum, int pageSize) {// 编写SQL Server分页查询的SQL语句String sql = "SELECT * FROM my_table OFFSET ? ROWSFETCH NEXT ? ROWS ONLY";// 获取分页查询的结果return sqlSession.selectList(sql, new Object[]{pageNum * pageSize, pageSize});}}// Service层public class MyService {@Autowiredprivate MyMapper myMapper;public List<MyEntity> findAllByPage(int pageNum, int pageSize) {return myMapper.findAllByPage(pageNum, pageSize);}}```五、总结通过MyBatis与SQL Server分页查询的结合,可以方便地实现分页查询功能。
朝夕教育——2020最新面试宝典带答案注:答案均以红色字体标注!一、试用SQL查询语句表达下列对教学数据库中三个基本表 S、SC 、C 的查询:S(sno,sname,SAGE,SSEX) 各字段表示学号,姓名,年龄,性别Sc(sno,cno,grade) 各字段表示学号,课程号,成绩、C(cno,cname, TEACHER) 各字段表示课程号,课程名和教师名其中 SAGE,grade 是数值型,其他均为字符型。
要求用 SQL 查询语句实现如下处理:1.求年龄大于所有女同学年龄的男学生姓名和年龄。
SELECTSNAME,SAGE FROM S AS XWHERE X.SSEX=' 男'AND X.SAGE >ALL (SELECT SAGE FROMS AS Y WHERE Y.SSEX=' 女')2.求年龄大于女同学平均年龄的男学生姓名和年龄。
SELECT SNAME,SAGEFROM SWHERE SSEX=' 男'AND SAGE>(SELECTAVG(SAGE) FROM S WHERE SSEX='女')3.在 SC 中检索成绩为空值的学生学号和课程号。
SELECT Sno,CnoFROM SC WHERE GRADE IS NULL4.检索姓名以 WANG 打头的所有学生的姓名和年龄。
SELECT SNAME,SAGE FROM SWHERE SNAME LIKE 'WANG%'5.检索学号比 WANG 同学大,而年龄比他小的学生姓名。
SELECTX.SNAME FROM S AS X, S AS YWHERE Y .SNAME='WANG' AND X.Sno>Y.Sno AND X.SAGE或:SELECT SNAMEfrom swhere sno>(select sno from s where SNAME='WANG') andSAGE<(select sAGE from s where SNAME='WANG')6.统计每门课程的学生选修人数(超过 2 人的课程才统计)。
sqlserver的分页语句SQL Server中的分页语句,是在查询结果中按照指定的规则进行分页操作,以便用户可以快速定位到自己需要的数据。
以下是10个常用的SQL Server分页语句:1. 使用OFFSET和FETCH NEXT进行分页OFFSET和FETCH NEXT是SQL Server 2012及以上版本中新增的分页语句,可以用于从查询结果中获取指定范围的数据。
例如,要获取第11到20条记录,可以使用以下语句:```SELECT *FROM table_nameORDER BY column_nameOFFSET 10 ROWSFETCH NEXT 10 ROWS ONLY;```2. 使用ROW_NUMBER()函数进行分页ROW_NUMBER()函数可以为结果集中的每一行生成一个唯一的数字,可以用于分页操作。
例如,要获取第11到20条记录,可以使用以下语句:SELECT *FROM (SELECT ROW_NUMBER() OVER (ORDER BY column_name) AS row_num, *FROM table_name) AS tWHERE row_num BETWEEN 11 AND 20;```3. 使用TOP和ORDER BY进行分页TOP和ORDER BY结合可以用于获取前N条记录,可以用于分页操作。
例如,要获取第11到20条记录,可以使用以下语句:```SELECT TOP 10 *FROM (SELECT TOP 20 *FROM table_nameORDER BY column_name) AS tORDER BY column_name DESC;4. 使用ROWCOUNT和SET ROWCOUNT进行分页ROWCOUNT和SET ROWCOUNT可以用于限制查询结果的行数,可以用于分页操作。
例如,要获取第11到20条记录,可以使用以下语句:```SET ROWCOUNT 20;SELECT *FROM table_nameWHERE column_name NOT IN (SELECT TOP 10 column_nameFROM table_nameORDER BY column_name);SET ROWCOUNT 0;```5. 使用子查询进行分页子查询可以用于获取指定范围的数据,可以用于分页操作。
C#操作sqlserver的DbHelper类(带分页)1、配置⽂件设置:<appSettings><add key="testDB" value="server=192.168.1.10\sw;database=testDB;uid=sa;pwd=Aa123456" /></appSettings>2、操作数据帮助类:using System;using System.Collections.Generic;using System.Configuration;using System.Data;using mon;using System.Data.SqlClient;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SwbAPI{public class DbHelper{//连接字符串static string strConn = ConfigurationManager.AppSettings["JiTuanShangWuDB"].ToString();//static string strConn = "server=192.168.1.238\sw;database=BusinessSystemDB;uid=sa;pwd=Aa123456";#region执⾏查询,返回DataTable对象-----------------------public static DataTable GetTable(string strSQL){return GetTable(strSQL, null);}public static DataTable GetTable(string strSQL, SqlParameter[] pas){return GetTable(strSQL, pas, CommandType.Text);}///<summary>///执⾏查询,返回DataTable对象///</summary>///<param name="strSQL">sql语句</param>///<param name="pas">参数数组</param>///<param name="cmdtype">Command类型</param>///<returns>DataTable对象</returns>public static DataTable GetTable(string strSQL, SqlParameter[] pas, CommandType cmdtype){DataTable dt = new DataTable(); ;using (SqlConnection conn = new SqlConnection(strConn)){SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);mandType = cmdtype;if (pas != null){da.SelectCommand.Parameters.AddRange(pas);}da.Fill(dt);}return dt;}#region根据枚举连接数据库public static DataTable GetTable(string strSQL, DataBaseName dataBaseName){return GetTable(strSQL, null, dataBaseName);}public static DataTable GetTable(string strSQL, SqlParameter[] pas, DataBaseName dataBaseName){return GetTable(strSQL, pas, CommandType.Text, dataBaseName);}///<summary>///执⾏查询,返回DataTable对象///</summary>///<param name="strSQL">sql语句</param>///<param name="pas">参数数组</param>///<param name="cmdtype">Command类型</param>///<returns>DataTable对象</returns>public static DataTable GetTable(string strSQL, SqlParameter[] pas, CommandType cmdtype, DataBaseName dataBaseName){DataTable dt = new DataTable(); ;using (SqlConnection conn = new SqlConnection(GetEnumDes(dataBaseName.ToString()))){SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);mandType = cmdtype;if (pas != null)}#endregion#endregion#region执⾏查询,返回DataSet对象-------------------------public static DataSet GetDataSet(string strSQL){return GetDataSet(strSQL, null);}public static DataSet GetDataSet(string strSQL, SqlParameter[] pas){return GetDataSet(strSQL, pas, CommandType.Text);}///<summary>///执⾏查询,返回DataSet对象///</summary>///<param name="strSQL">sql语句</param>///<param name="pas">参数数组</param>///<param name="cmdtype">Command类型</param>///<returns>DataSet对象</returns>public static DataSet GetDataSet(string strSQL, SqlParameter[] pas, CommandType cmdtype){DataSet dt = new DataSet(); ;using (SqlConnection conn = new SqlConnection(strConn)){SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);mandType = cmdtype;if (pas != null){da.SelectCommand.Parameters.AddRange(pas);}da.Fill(dt);if (dt != null && dt.Tables.Count == 2){dt.Tables[0].TableName = "DataList";dt.Tables[1].TableName = "DataTotal";}else if (dt != null && dt.Tables.Count == 1){dt.Tables[0].TableName = "DataList";}}return dt;}#region根据枚举连接数据库public static DataSet GetDataSet(string strSQL, DataBaseName dataBaseName){return GetDataSet(strSQL, null, dataBaseName);}public static DataSet GetDataSet(string strSQL, SqlParameter[] pas, DataBaseName dataBaseName){return GetDataSet(strSQL, pas, CommandType.Text, dataBaseName);}///<summary>///执⾏查询,返回DataSet对象///</summary>///<param name="strSQL">sql语句</param>///<param name="pas">参数数组</param>///<param name="cmdtype">Command类型</param>///<returns>DataSet对象</returns>public static DataSet GetDataSet(string strSQL, SqlParameter[] pas, CommandType cmdtype, DataBaseName dataBaseName) {DataSet dt = new DataSet(); ;using (SqlConnection conn = new SqlConnection(GetEnumDes(dataBaseName.ToString()))){SqlDataAdapter da = new SqlDataAdapter(strSQL, conn);mandType = cmdtype;if (pas != null){da.SelectCommand.Parameters.AddRange(pas);}da.Fill(dt);if (dt != null && dt.Tables.Count == 2){dt.Tables[0].TableName = "DataList";dt.Tables[1].TableName = "DataTotal";}else if (dt != null && dt.Tables.Count == 1){#endregion#region执⾏⾮查询存储过程和SQL语句-----------------------------public static int ExcuteProc(string ProcName){return ExcuteSQL(ProcName, null, CommandType.StoredProcedure);}public static int ExcuteProc(string ProcName, SqlParameter[] pars){return ExcuteSQL(ProcName, pars, CommandType.StoredProcedure);}public static int ExcuteSQL(string strSQL){return ExcuteSQL(strSQL, null);}public static int ExcuteSQL(string strSQL, SqlParameter[] paras){return ExcuteSQL(strSQL, paras, CommandType.Text);}///执⾏⾮查询存储过程和SQL语句///增、删、改///</summary>///<param name="strSQL">要执⾏的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<param name="cmdType">Command类型</param>///<returns>返回影响⾏数</returns>public static int ExcuteSQL(string strSQL, SqlParameter[] paras, CommandType cmdType){int i = 0;using (SqlConnection conn = new SqlConnection(strConn)){SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdType;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();i = cmd.ExecuteNonQuery();conn.Close();}return i;}#region执⾏sql返回⾃增ID///<summary>///执⾏SQL语句,返回⾃增ID///</summary>///<param name="SQLString">SQL语句</param>///<returns>影响的记录数</returns>public static int ExecuteSQLReturnID(string SQLString){using (SqlConnection connection = new SqlConnection(strConn)){using (SqlCommand cmd = new SqlCommand(SQLString, connection)){try{connection.Open();mandText += ";\nSELECT SCOPE_IDENTITY() AS NewID;";int id = Convert.ToInt32(cmd.ExecuteScalar());return id;}catch (System.Data.SqlClient.SqlException e){connection.Close();throw e;}}}}#endregion#region执⾏sql返回⾃增ID///<summary>///执⾏SQL语句,返回⾃增ID///</summary>///<param name="SQLString">SQL语句</param>///<returns>影响的记录数</returns>public static int ExecuteSQLReturnID(string SQLString, SqlParameter[] paras, DataBaseName dataBaseName) {try{if (paras != null){cmd.Parameters.AddRange(paras);}connection.Open();mandText += ";\nSELECT SCOPE_IDENTITY() AS NewID;";int id = Convert.ToInt32(cmd.ExecuteScalar());return id;}catch (System.Data.SqlClient.SqlException e){connection.Close();throw e;}}}}#endregion#region根据枚举连接数据库public static int ExcuteProc(string ProcName, DataBaseName dataBaseName){return ExcuteSQL(ProcName, null, CommandType.StoredProcedure, dataBaseName);}public static int ExcuteProc(string ProcName, SqlParameter[] pars, DataBaseName dataBaseName){return ExcuteSQL(ProcName, pars, CommandType.StoredProcedure, dataBaseName);}public static int ExcuteSQL(string strSQL, DataBaseName dataBaseName){return ExcuteSQL(strSQL, null, dataBaseName);}public static int ExcuteSQL(string strSQL, SqlParameter[] paras, DataBaseName dataBaseName){return ExcuteSQL(strSQL, paras, CommandType.Text, dataBaseName);}///执⾏⾮查询存储过程和SQL语句///增、删、改///</summary>///<param name="strSQL">要执⾏的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<param name="cmdType">Command类型</param>///<returns>返回影响⾏数</returns>public static int ExcuteSQL(string strSQL, SqlParameter[] paras, CommandType cmdType, DataBaseName dataBaseName) {int i = 0;using (SqlConnection conn = new SqlConnection(GetEnumDes(dataBaseName.ToString()))){SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdType;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();i = cmd.ExecuteNonQuery();conn.Close();}return i;}#region执⾏sql返回⾃增ID///<summary>///执⾏SQL语句,返回⾃增ID///</summary>///<param name="SQLString">SQL语句</param>///<returns>影响的记录数</returns>public static int ExecuteSQLReturnID(string SQLString, DataBaseName dataBaseName){using (SqlConnection connection = new SqlConnection(GetEnumDes(dataBaseName.ToString()))){using (SqlCommand cmd = new SqlCommand(SQLString, connection)){try{connection.Open();mandText += ";\nSELECT SCOPE_IDENTITY() AS NewID;";int id = Convert.ToInt32(cmd.ExecuteScalar());return id;}catch (System.Data.SqlClient.SqlException e){connection.Close();throw e;#endregion#endregion#endregion#region执⾏查询返回第⼀⾏,第⼀列---------------------------------///<summary>///执⾏SQL语句,返回第⼀⾏,第⼀列///</summary>///<param name="strSQL">要执⾏的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<param name="paras">执⾏类型,</param>///<returns>返回结果</returns>public static object ExcuteScalarSQLObj(string strSQL, SqlParameter[] paras){object i ;using (SqlConnection conn = new SqlConnection(strConn)){SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = CommandType.Text;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();if (DBNull.Value == cmd.ExecuteScalar()){i = null;}else{i =cmd.ExecuteScalar();}conn.Close();}return i;}public static int ExcuteScalarSQL(string strSQL){return ExcuteScalarSQL(strSQL, null);}public static int ExcuteScalarSQL(string strSQL, SqlParameter[] paras){return ExcuteScalarSQL(strSQL, paras, CommandType.Text);}public static int ExcuteScalarProc(string strSQL, SqlParameter[] paras){return ExcuteScalarSQL(strSQL, paras, CommandType.StoredProcedure);}///<summary>///执⾏SQL语句,返回第⼀⾏,第⼀列///</summary>///<param name="strSQL">要执⾏的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<returns>返回影响⾏数</returns>public static int ExcuteScalarSQL(string strSQL, SqlParameter[] paras, CommandType cmdType) {int i = 0;using (SqlConnection conn = new SqlConnection(strConn)){SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdType;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();if (DBNull.Value == cmd.ExecuteScalar()){i = 0;}else{i = Convert.ToInt32(cmd.ExecuteScalar());}conn.Close();}return i;}#region根据枚举连接数据库public static int ExcuteScalarSQL(string strSQL, DataBaseName dataBaseName){return ExcuteScalarSQL(strSQL, paras, CommandType.Text, dataBaseName);}public static int ExcuteScalarProc(string strSQL, SqlParameter[] paras, DataBaseName dataBaseName){return ExcuteScalarSQL(strSQL, paras, CommandType.StoredProcedure, dataBaseName);}///<summary>///执⾏SQL语句,返回第⼀⾏,第⼀列///</summary>///<param name="strSQL">要执⾏的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<returns>返回影响⾏数</returns>public static int ExcuteScalarSQL(string strSQL, SqlParameter[] paras, CommandType cmdType, DataBaseName dataBaseName) {int i = 0;using (SqlConnection conn = new SqlConnection(GetEnumDes(dataBaseName.ToString()))){SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdType;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();if (DBNull.Value == cmd.ExecuteScalar()){i = 0;}else{i = Convert.ToInt32(cmd.ExecuteScalar());}conn.Close();}return i;}#endregion#endregion#region查询获取单个值------------------------------------///<summary>///调⽤不带参数的存储过程获取单个值///</summary>///<param name="ProcName"></param>///<returns></returns>public static object GetObjectByProc(string ProcName){return GetObjectByProc(ProcName, null);}///<summary>///调⽤带参数的存储过程获取单个值///</summary>///<param name="ProcName"></param>///<param name="paras"></param>///<returns></returns>public static object GetObjectByProc(string ProcName, SqlParameter[] paras){return GetObject(ProcName, paras, CommandType.StoredProcedure);}///<summary>///根据sql语句获取单个值///</summary>///<param name="strSQL"></param>///<returns></returns>public static object GetObject(string strSQL){return GetObject(strSQL, null);}///<summary>///根据sql语句和参数数组获取单个值///</summary>///<param name="strSQL"></param>///<param name="paras"></param>///<returns></returns>public static object GetObject(string strSQL, SqlParameter[] paras){return GetObject(strSQL, paras, CommandType.Text);}///<summary>///执⾏SQL语句,返回⾸⾏⾸列///</summary>///<param name="strSQL">要执⾏的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<returns>返回的⾸⾏⾸列</returns>{SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdtype;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();o = cmd.ExecuteScalar();conn.Close();}return o;}#region根据枚举连接数据库///<summary>///调⽤不带参数的存储过程获取单个值///</summary>///<param name="ProcName"></param>///<returns></returns>public static object GetObjectByProc(string ProcName, DataBaseName dataBaseName){return GetObjectByProc(ProcName, null, dataBaseName);}///<summary>///调⽤带参数的存储过程获取单个值///</summary>///<param name="ProcName"></param>///<param name="paras"></param>///<returns></returns>public static object GetObjectByProc(string ProcName, SqlParameter[] paras, DataBaseName dataBaseName){return GetObject(ProcName, paras, CommandType.StoredProcedure, dataBaseName);}///<summary>///根据sql语句获取单个值///</summary>///<param name="strSQL"></param>///<returns></returns>public static object GetObject(string strSQL, DataBaseName dataBaseName){return GetObject(strSQL, null, dataBaseName);}///<summary>///根据sql语句和参数数组获取单个值///</summary>///<param name="strSQL"></param>///<param name="paras"></param>///<returns></returns>public static object GetObject(string strSQL, SqlParameter[] paras, DataBaseName dataBaseName){return GetObject(strSQL, paras, CommandType.Text, dataBaseName);}///<summary>///执⾏SQL语句,返回⾸⾏⾸列///</summary>///<param name="strSQL">要执⾏的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<returns>返回的⾸⾏⾸列</returns>public static object GetObject(string strSQL, SqlParameter[] paras, CommandType cmdtype, DataBaseName dataBaseName) {object o = null;using (SqlConnection conn = new SqlConnection(GetEnumDes(dataBaseName.ToString()))){SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdtype;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();o = cmd.ExecuteScalar();conn.Close();}return o;}#endregion#endregion#region查询获取DataReader------------------------------------///<returns>DataReader对象</returns>public static SqlDataReader GetReaderByProc(string procName){return GetReaderByProc(procName, null);}///<summary>///调⽤带有参数的存储过程,返回DataReader对象///</summary>///<param name="procName">存储过程名</param>///<param name="paras">参数数组</param>///<returns>DataReader对象</returns>public static SqlDataReader GetReaderByProc(string procName, SqlParameter[] paras){return GetReader(procName, paras, CommandType.StoredProcedure);}///<summary>///根据sql语句返回DataReader对象///</summary>///<param name="strSQL">sql语句</param>///<returns>DataReader对象</returns>public static SqlDataReader GetReader(string strSQL){return GetReader(strSQL, null);}///<summary>///根据sql语句和参数返回DataReader对象///</summary>///<param name="strSQL">sql语句</param>///<param name="paras">参数数组</param>///<returns>DataReader对象</returns>public static SqlDataReader GetReader(string strSQL, SqlParameter[] paras){return GetReader(strSQL, paras, CommandType.Text);}///<summary>///查询SQL语句获取DataReader///</summary>///<param name="strSQL">查询的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<returns>查询到的DataReader(关闭该对象的时候,⾃动关闭连接)</returns>public static SqlDataReader GetReader(string strSQL, SqlParameter[] paras, CommandType cmdtype){SqlDataReader sqldr = null;SqlConnection conn = new SqlConnection(strConn);SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdtype;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();//CommandBehavior.CloseConnection的作⽤是如果关联的DataReader对象关闭,则连接⾃动关闭sqldr = cmd.ExecuteReader(CommandBehavior.CloseConnection);return sqldr;}#region根据枚举连接数据库///<summary>///调⽤不带参数的存储过程,返回DataReader对象///</summary>///<param name="procName">存储过程名称</param>///<returns>DataReader对象</returns>public static SqlDataReader GetReaderByProc(string procName, DataBaseName dataBaseName){return GetReaderByProc(procName, null, dataBaseName);}///<summary>///调⽤带有参数的存储过程,返回DataReader对象///</summary>///<param name="procName">存储过程名</param>///<param name="paras">参数数组</param>///<returns>DataReader对象</returns>public static SqlDataReader GetReaderByProc(string procName, SqlParameter[] paras, DataBaseName dataBaseName) {return GetReader(procName, paras, CommandType.StoredProcedure, dataBaseName);}///<summary>///根据sql语句返回DataReader对象///</summary>///<param name="strSQL">sql语句</param>///<returns>DataReader对象</returns>public static SqlDataReader GetReader(string strSQL, DataBaseName dataBaseName){return GetReader(strSQL, null, dataBaseName);}///<summary>///根据sql语句和参数返回DataReader对象public static SqlDataReader GetReader(string strSQL, SqlParameter[] paras, DataBaseName dataBaseName){return GetReader(strSQL, paras, CommandType.Text, dataBaseName);}///<summary>///查询SQL语句获取DataReader///</summary>///<param name="strSQL">查询的SQL语句</param>///<param name="paras">参数列表,没有参数填⼊null</param>///<returns>查询到的DataReader(关闭该对象的时候,⾃动关闭连接)</returns>public static SqlDataReader GetReader(string strSQL, SqlParameter[] paras, CommandType cmdtype, DataBaseName dataBaseName) {SqlDataReader sqldr = null;SqlConnection conn = new SqlConnection(GetEnumDes(dataBaseName.ToString()));SqlCommand cmd = new SqlCommand(strSQL, conn);mandType = cmdtype;if (paras != null){cmd.Parameters.AddRange(paras);}conn.Open();//CommandBehavior.CloseConnection的作⽤是如果关联的DataReader对象关闭,则连接⾃动关闭sqldr = cmd.ExecuteReader(CommandBehavior.CloseConnection);return sqldr;}#endregion#endregion#region批量插⼊数据---------------------------------------------///<summary>///往数据库中批量插⼊数据///</summary>///<param name="sourceDt">数据源表</param>///<param name="targetTable">服务器上⽬标表</param>public static void BulkToDB(DataTable sourceDt, string targetTable){SqlConnection conn = new SqlConnection(strConn);SqlBulkCopy bulkCopy = new SqlBulkCopy(conn); //⽤其它源的数据有效批量加载sql server表中bulkCopy.DestinationTableName = targetTable; //服务器上⽬标表的名称bulkCopy.BatchSize = sourceDt.Rows.Count; //每⼀批次中的⾏数try{conn.Open();if (sourceDt != null && sourceDt.Rows.Count != 0)bulkCopy.WriteToServer(sourceDt); //将提供的数据源中的所有⾏复制到⽬标表中}catch (Exception ex){throw ex;}finally{conn.Close();if (bulkCopy != null)bulkCopy.Close();}}#region根据枚举连接数据库///<summary>///往数据库中批量插⼊数据///</summary>///<param name="sourceDt">数据源表</param>///<param name="targetTable">服务器上⽬标表</param>public static void BulkToDB(DataTable sourceDt, string targetTable, DataBaseName dataBaseName){SqlConnection conn = new SqlConnection(GetEnumDes(dataBaseName.ToString()));SqlBulkCopy bulkCopy = new SqlBulkCopy(conn); //⽤其它源的数据有效批量加载sql server表中bulkCopy.DestinationTableName = targetTable; //服务器上⽬标表的名称bulkCopy.BatchSize = sourceDt.Rows.Count; //每⼀批次中的⾏数try{conn.Open();if (sourceDt != null && sourceDt.Rows.Count != 0)bulkCopy.WriteToServer(sourceDt); //将提供的数据源中的所有⾏复制到⽬标表中}catch (Exception ex){throw ex;}finally}}#endregion#endregion#region根据枚举返回数据库连接字符串public static string GetEnumDes(string dataBaseName){string conn = string.Empty;if (dataBaseName == "集团商务"){conn = ConfigurationManager.AppSettings["JiTuanShangWuDB"].ToString();}else if (dataBaseName == "数据平台"){conn = ConfigurationManager.AppSettings["ShuJuPingTai"].ToString();}else if (dataBaseName == "⽜经纪") {conn = ConfigurationManager.AppSettings["NiuJingJi"].ToString();}else if (dataBaseName == "会员"){conn = ConfigurationManager.AppSettings["MobilePlatformDB"].ToString();}else if (dataBaseName == "电商官⽹"){conn = ConfigurationManager.AppSettings["ElectricityDB"].ToString();}else if (dataBaseName == "数据平台DI"){conn = ConfigurationManager.AppSettings["ShuJuPingTaiDI"].ToString();}else{conn = ConfigurationManager.AppSettings["JiTuanShangWuDB"].ToString();}return conn;}#endregion#region MyRegion 执⾏事务逻辑///<summary>///有锁的事务⽅法插⼊数据///</summary>///<param name="tran"></param>///<param name="sql"></param>///<param name="pms"></param>///<returns></returns>public static int ExecuteNonQuery(IDbTransaction tran, string sql, params SqlParameter[] pms){using (SqlCommand cmd = new SqlCommand(sql, (SqlConnection)tran.Connection, (SqlTransaction)tran)) {if (pms != null){cmd.Parameters.AddRange(pms);}return cmd.ExecuteNonQuery();}}#endregion}#region数据库--枚举(DataBaseName)///<summary>///数据库类型枚举:集团商务、⽜经纪///</summary>public enum DataBaseName{集团商务,数据平台,⽜经纪,会员,电商官⽹,数据平台DI}#endregion#region MyRegion 事务sqlpublic class TransactionDal{CreateConnection = Connection;}public void BeginTransaction(){dbconnection = new SqlConnection(CreateConnection);dbconnection.Open();transaction = dbconnection.BeginTransaction();}public void CommitTransaction(){if (null != transaction){mit();}}public void RollbackTransaction(){if (null != transaction){transaction.Rollback();}}public void DisposeTransaction(){if (dbconnection.State == ConnectionState.Open){dbconnection.Close();}if (null != transaction){transaction.Dispose();}}}#endregion}3、调⽤存储过程实例:SqlParameter[] param = new SqlParameter[]{new SqlParameter("@type", 0),new SqlParameter("@BaseID", 0),new SqlParameter("@FenGongSiID",model.tb_diqu)}BaseID = DbHelper.ExcuteProc("Proc_Base_Add", param);View Code4、修改实例:public ActionResult HuiFuKeHu(int baseid){var sql = string.Format(@"UPDATE BaseTable SET ZhuangTai=0 WHERE BaseID={0}", baseid); var re = DbHelper.ExcuteSQL(sql);var restr = "";if (re > 0)restr = "ok";elserestr = "no";return Json(new { y = restr });}View Code5、分页帮助类:using System;using System.Collections.Generic;using System.Data;using System.Data.SqlClient;using System.Linq;using System.Text;using System.Web;namespace SwbAPI{public class PagingHelper///<summary>///获取分页SQL语句,默认row_number为关健字,所有表不允许使⽤该字段名///</summary>///<param name="_pageSize">每页记录数</param>///<param name="_pageIndex">当前页数</param>///<param name="_columnSql">查询列</param>///<param name="_fromSql">from后sql</param>///<param name="_orderField">排序字段,多个则⽤“,”隔开</param>///<returns>分页SQL语句</returns>public static DataSet GetPagingData(int _pageSize, int _pageIndex, string _columnSql, string _fromSql, string _orderField){DataSet ds = null;//检查当前页数if (_pageIndex < 1){_pageIndex = 1;}//分页sql,拼接SQL字符串,加上ROW_NUMBER函数进⾏分页StringBuilder newSafeSql = new StringBuilder();newSafeSql.AppendFormat("SELECT ROW_NUMBER() OVER(ORDER BY {0}) as ROWID,", _orderField);newSafeSql.AppendFormat("{0} from {1}", _columnSql, _fromSql);//拼接成最终的SQL语句StringBuilder sbSql = new StringBuilder();sbSql.Append("SELECT * FROM (");sbSql.Append(newSafeSql.ToString());sbSql.Append(") AS T");sbSql.AppendFormat(" WHERE ROWID between {0} and {1}", ((_pageIndex - 1) * _pageSize) + 1, _pageIndex * _pageSize);// 总条数sqlsbSql.AppendFormat(";select count(1) Total from " + _fromSql);sbSql.ToString();ds = DbHelper.GetDataSet(sbSql.ToString());return ds;}#region根据枚举返回数据库连接字符串///<summary>///获取分页SQL语句,默认row_number为关健字,所有表不允许使⽤该字段名///</summary>///<param name="_pageSize">每页记录数</param>///<param name="_pageIndex">当前页数</param>///<param name="_columnSql">查询列</param>///<param name="_fromSql">from后sql</param>///<param name="_orderField">排序字段,多个则⽤“,”隔开</param>///<returns>分页SQL语句</returns>public static DataSet GetPagingData(int _pageSize, int _pageIndex, string _columnSql, string _fromSql, string _orderField, DataBaseName dataBaseName){DataSet ds = null;//检查当前页数if (_pageIndex < 1){_pageIndex = 1;}//分页sql,拼接SQL字符串,加上ROW_NUMBER函数进⾏分页StringBuilder newSafeSql = new StringBuilder();newSafeSql.AppendFormat("SELECT ROW_NUMBER() OVER(ORDER BY {0}) as ROWID,", _orderField);newSafeSql.AppendFormat("{0} from {1}", _columnSql, _fromSql);//拼接成最终的SQL语句StringBuilder sbSql = new StringBuilder();sbSql.Append("SELECT * FROM (");sbSql.Append(newSafeSql.ToString());sbSql.Append(") AS T");sbSql.AppendFormat(" WHERE ROWID between {0} and {1}", ((_pageIndex - 1) * _pageSize) + 1, _pageIndex * _pageSize);// 总条数sqlsbSql.AppendFormat(";select count(1) Total from " + _fromSql);sbSql.ToString();ds = DbHelper.GetDataSet(sbSql.ToString(),dataBaseName);return ds;}#endregion#region根据枚举返回数据库连接字符串///<summary>///获取分页SQL语句,默认row_number为关健字,所有表不允许使⽤该字段名///</summary>///<param name="_pageSize">每页记录数</param>///<param name="_pageIndex">当前页数</param>///<param name="_columnSql">查询列</param>///<param name="_fromSql">from后sql</param>///<param name="_orderField">排序字段,多个则⽤“,”隔开</param>///<returns>分页SQL语句</returns>public static DataSet GetPagingData(int _pageSize, int _pageIndex, string _columnSql, string _fromSql,SqlParameter[] param, string _orderField, DataBaseName dataBaseName) {DataSet ds = null;//检查当前页数。
SQLServer使⽤row_number分页的实现⽅法本⽂为⼤家分享了SQL Server使⽤row_number分页的实现⽅法,供⼤家参考,具体内容如下1、⾸先是select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1⽣成带序号的集合2、再查询该集合的第 1 到第 5条数据select * from(select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1) as tempwhere rowNumber between 1 and 5完整的Sql语句declare @pagesize int; declare @pageindex int; set @pagesize = 3set @pageindex = 1; --第⼀页select * from (select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1) as temp where rowNumber between (((@pageindex-1)*@pagesize)+1) and (@pageindex*@pagesize)set @pageindex = 2; --第⼆页select * from (select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1) as temp where rowNumber between (((@pageindex-1)*@pagesize)+1) and (@pageindex*@pagesize)set @pageindex = 3; --第三页select * from (select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1) as temp where rowNumber between (((@pageindex-1)*@pagesize)+1) and (@pageindex*@pagesize)set @pageindex = 4;--第四页select * from (select ROW_NUMBER() over(order by id asc) as 'rowNumber', * from table1) as temp where rowNumber between (((@pageindex-1)*@pagesize)+1) and (@pageindex*@pagesize)下⾯我们来写个存储过程分页Alter Procedure PagePager@TableName varchar(80),@File varchar(1000),---@Where varchar(500),---带and连接@OrderFile varchar(100), -- 排序字段@OrderType varchar(10),--asc:顺序,desc:倒序@PageSize varchar(10), --@PageIndex varchar(10) --asif(ISNULL(@OrderFile, '') = '')beginset @OrderFile = 'ID';endif(ISNULL(@OrderType,'') = '')beginset @OrderType = 'asc'endif(ISNULL(@File,'') = '')beginset @File = '*'enddeclare @select varchar(8000)set @select = ' select ' + @File + ' from ( select *,ROW_NUMBER() over(order by ' + @OrderFile + ' '+ @OrderType + ') as ''rowNumber'' from ' + @TableName + ' where 1=1 ' + @Where + ' ) temp where rowNumber between (((' + @PageIndex + ' - 1) * ' + exec(@select)以上就是本⽂的全部内容,希望对⼤家学习row_number分页有所帮助。
SQLSERVER分页查询关于使⽤Top⽅式和row_number()解析函数的不同临近春节,⼼早已飞了不在⼯作上了,下⾯⼩编给⼤家整理些数据库的⼏种分页查询。
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 id not in(--40是这么计算出来的:10*(5-1)-- 页⼤⼩*(查询第⼏页-1)select top 40 id from [TCCLine].[dbo].[CLine_CommonImage] order by id)order by id结果为:Sql Sever 2005及以上版本,多了个分页查询⽅法:/** firstIndex:起始索引* pageSize:每页显⽰的数量* orderColumn:排序的字段名* SQL:可以是简单的单表查询语句,也可以是复杂的多表联合查询语句*/select top pageSize o.* from (select row_number() over(order by orderColumn) as rownumber,* from(SQL) as o where rownumber>firstIndex;例如:select top 10 numComImg.* from( select row_number() over(order by id asc) as rownumber,* from (select * FROM [TCCLine].[dbo].[CLine_CommonImage]) as comImg)as numComImg where rownumber>40结果:这两个⽅法,就仅仅是多了⼀列 rewnumber 吗?当然不是,来看下内部差别吧:在两个SQL上,分别加⼊以下SQL,并使⽤MS的“包括执⾏计划”,便于查看执⾏详情:SET STATISTICS TIME ONGO要执⾏的SQL:SET STATISTICS TIME ONGOselect top 10 numComImg.* from( select row_number() over(order by id asc) as rownumber,* from (select * FROM [TCCLine].[dbo].[CLine_CommonImage]) as comImg)as numComImg where rownumber>40SET STATISTICS TIME ONGOselect top 10 * --10 为页⼤⼩from [TCCLine].[dbo].[CLine_CommonImage]where id not in(--40是这么计算出来的:10*(5-1)-- 页⼤⼩*(查询第⼏页-1)select top 40 id from [TCCLine].[dbo].[CLine_CommonImage] order by id)order by id执⾏之后,查看执⾏计划:看得出,两个同样功能的SQL,执⾏时,使⽤ row_number() 的,要⽐是⽤纯TOP⽅式的,查询开销少得多,上图显⽰ 28:72,纯top⽅式,使⽤了两次聚集扫描。
mssql分页查询语句1. 什么是分页查询分页查询是指将大量数据按照一定的规则分成若干页进行查询的方法。
在数据库中,当数据量很大时,一次性查询所有数据可能会导致性能问题。
因此,我们可以使用分页查询来限制每次查询的数据量,以提高查询效率。
2. mssql分页查询语句的语法在Microsoft SQL Server(mssql)中,我们可以使用OFFSET和FETCH子句来实现分页查询。
具体的语法如下:SELECT column1, column2, ...FROM tableORDER BY columnOFFSET {offset} ROWSFETCH NEXT {fetch} ROWS ONLY;其中,column1, column2, ...是要查询的列名,table是要查询的表名,column是用于排序的列名,offset是偏移量,表示从第几行开始查询,fetch是要查询的行数。
3. 使用mssql分页查询语句下面我们将通过一个具体的例子来演示如何使用mssql分页查询语句。
假设我们有一个名为students的表,包含id、name和age三列,我们希望按照id升序排列,并且每页显示5条数据。
首先,我们需要计算出偏移量。
假设我们要查询第2页的数据,那么偏移量就是(页数-1) * 每页显示的条数,即(2-1) * 5 = 5。
然后,我们可以使用以下的mssql分页查询语句来查询第2页的数据:SELECT id, name, ageFROM studentsORDER BY idOFFSET 5 ROWSFETCH NEXT 5 ROWS ONLY;这条查询语句的意思是,从students表中按照id升序排列,跳过前5行数据,然后取接下来的5行数据。
4. mssql分页查询语句的优化在使用mssql分页查询语句时,我们还可以进行一些优化,以提高查询效率。
4.1 使用索引为了加快查询速度,我们可以为要排序的列创建索引。
SQL Server 2005中ROW_NUMBER()函数在存储过程分
页中的应用
郭美娜
【期刊名称】《曲靖师范学院学报》
【年(卷),期】2009(28)3
【摘要】SQL Server 2005中新增的ROW_NUMBER()函数为存储过程分页提供了便利,提出了多表关联查询时,在一个Select语句中同时使用ROW_NUMBER()与DISTINCT,DISTINCT失效的解决方法.
【总页数】3页(P66-68)
【作者】郭美娜
【作者单位】中国医科大学,计算机中心,辽宁,沈阳,110001
【正文语种】中文
【中图分类】TP311.138
【相关文献】
1.存储过程在SQL Server 2005中应用 [J], 冯洪峰
2.SQLServer2005存储过程在学生上机计费管理系统中的应用* [J], 耿涛;黄磊;刘儒香
3.SQL Server 2008中的存储过程的研究及应用 [J], 张梅梅;宋正明;李豪;王影
4.基于SQL Server2005存储过程的应用与研究 [J], 那勇
5.自定义聚合函数:用户定义的聚合函数——评估SQL Server 2005中的新功能[J], Itzik; Ben-Gan; 欧阳宇(译)
因版权原因,仅展示原文概要,查看原文内容请购买。
sql server分页查询sql语句SQL Server分页查询SQL语句可以使用OFFSET-FETCH子句,语法如下:SELECT column1, column2, ...FROM table_nameORDER BY column_name1, column_name2, ...OFFSET start_row_num ROWSFETCH NEXT page_size ROWS ONLY;其中,start_row_num表示查询的起始行号,page_size表示每页显示的行数。
例如,要查询第2页、每页显示10行记录的数据,可以这样写:SELECT column1, column2, ...FROM table_nameORDER BY column_name1, column_name2, ...OFFSET 10 ROWS --起始行号为11FETCH NEXT 10 ROWS ONLY; --每页显示10行记录除了OFFSET-FETCH子句,还可以使用ROW_NUMBER()函数实现分页查询。
具体实现可以参考下面的SQL语句:SELECT *FROM (SELECT ROW_NUMBER() OVER(ORDER BY column_name1,column_name2, ...) AS RowNum,column1, column2, ...FROM table_name) AS AWHERE A.RowNum BETWEEN start_row_num AND end_row_num;其中,start_row_num和end_row_num表示查询的起始行号和结束行号。
例如,要查询第2页、每页显示10行记录的数据,可以这样写:SELECT *FROM (SELECT ROW_NUMBER() OVER(ORDER BY column_name1,column_name2, ...) AS RowNum,column1, column2, ...FROM table_name) AS AWHERE A.RowNum BETWEEN 11 AND 20; --第2页显示的行号为11-20注意,以上两种方式均需要指定排序的列名,以确定每次分页查询的数据顺序。