当前位置:首页 » 编程语言 » sqlserver2008分页查询
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlserver2008分页查询

发布时间: 2022-08-23 09:38:00

A. sql语句分页查询,一页面多少数据合适

2万条。
在SQLServer中通过SQL语句实现分页查询,在SQLServer中通过SQL语句实现分页后插入数据2万条,用更多的数据测试会明显一些。微软的SQLSERVER提供了两种索引:聚集索引,也称聚类索引、簇集索引和非聚集索引,也称非聚类索引、非簇集索引。
建立一个web应用,分页浏览功能必不可少。这个问题是数据库处理中十分常见的问题。经典的数据分页方法是:ADO纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页。但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存。游标一建立,就将相关的记录锁住,直到取消游标。游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的操作。而对于多表和大表中定义的游标(大的数据集合)循环很容易使程序进入一个漫长的等待甚至死机。更重要的是,对于非常大的数据模型而言,分页检索时,如果按照传统的每次都加载整个数据源的方法是非常浪费资源的。现在流行的分页方法一般是检索页面大小的块区的数据,而非检索所有的数据,然后单步执行当前行。最早较好地实现这种根据页面大小和页码来提取数据的方法大概就是“俄罗斯存储过程”。这个存储过程用了游标,由于游标的局限性,所以这个方法并没有得到大家的普遍认可,后来,网上有人改造了此存储过程,实现了分页储存。

B. Sql server2008怎样分页

你可以用存储过程分页,如下存储过程支持分页和排序:

CREATE PROCEDURE GetSortedMovies
(
@SortExpression NVarChar(100),
@StartRowIndex INT,
@MaximumRows INT
)
AS

-- 创建一个临时表存储查询结果
CREATE TABLE #PageIndex
(
IndexId INT IDENTITY (1,1) NOT NULL,
RecordId INT
)
-- 插入临时表
INSERT INTO #PageIndex (RecordId)
SELECT Id FROM Movies
ORDER BY
CASE WHEN @SortExpression='Id' THEN Id END ASC,
CASE WHEN @SortExpression='Id DESC' THEN Id END DESC,
CASE WHEN @SortExpression='Title' THEN Title END ASC,
CASE WHEN @SortExpression='Title DESC' THEN Title END DESC,
CASE WHEN @SortExpression='Description' THEN Description END ASC,
CASE WHEN @SortExpression='Description DESC' THen Description END DESC

-- 得到页数
SELECT Id,Title,Description FROM Movies
INNER JOIN #PageIndex WITH (nolock)
ON Movies.Id = #PageIndex.RecordId
WHERE #PageIndex.IndexId > @StartRowIndex
AND #PageIndex.IndexId < (@StartRowIndex + @MaximunRows + 1)
ORDER BY #PageIndex.IndexId

C. SQL SERVER 2008 分页代码怎么写

select top 10 *
from (select row_number()
over(order by ID asc) as rownumber,*
from [联系人管理表] where [民族] LIKE '%汉%') temp_row
where rownumber > 10
//把条件写在排序语句那里

D. Sql Server 2008 子查询问题

如果你的数据库只有这30条数据,那么你的猜想和写法是对的,但是如果不止30条数据,当然不对了,因为你又没做排序,你那个前30条和前15条根本没有依据,应该是按什么排序的前多少条
select top 30 id from lh_crm_customerInfo where ID not in (select top 15 id from lh_crm_customerInfo order by ID ) order by ID
加上按ID排序试试吧

E. SQL Server数据库用sql语句实现分页查询 (从M条数据开始,查找N条记录。sqlserver数据库。请举例说明。)

1:新建一个数据库
create
database
数据库名
2:新建一个表
create
table
表名
(
字段名
类型
是否为空
)
3:删除一个表
drop
table
表名
4:增加一个记录
insert
表名
[(字段)]
values
(
内容
)
5:删除一个记录
delete
[from]
表名
where
条件
6、修改一个记录
update
表名
set
字段名=更新内容
where
条件
7、在原表中增加一个字段
alter
table
表名
add
column
字段名
类型
8:在原表中删除一个字段
alter
table
表名
drop
column
字段名
9、查询一个表记录
select
*
from
表名
10、带条件查询一个表记录
select
*
from
表名
where
=条件

F. sql server 2008 用row_number() over()怎么分页

主要采用row_number对其进行编号,然后根据页数取出相应的编号,具体的原理,你可以看一下这里

row_number分页原理

如有疑问,及时沟通!

G. SQL Server 分页 查询语句

四种方式实现SQLServer 分页查询
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 40 id from test order by id
)
order by id
原理:需要拿出数据库的第5页,就是40-50条记录。首先拿出数据库中的前40条记录的id值,然后再拿出剩余部分的前10条元素

第二种方法:
还是以上面的结果为例,采用另外的一种方法
--数据的意思和上面提及的一样
select top 10 *
from test
where id >
(
select isnull(max(id),0)
from
(
select top 40 id from test order by id
) A
)
order by id
原理:先查询前40条记录,然后获得其最id值,如果id值为null的,那么就返回0
然后查询id值大于前40条记录的最大id值的记录。
这个查询有一个条件,就是id必须是int类型的。

第三种方法:
select top 10 *
from
(
select row_number() over(order by id) as rownumber,* from test
) A
where rownumber > 40
原理:先把表中的所有数据都按照一个rowNumber进行排序,然后查询rownuber大于40的前十条记录
这种方法和oracle中的一种分页方式类似,不过只支持2005版本以上的
第四种:
存储过程查询
创建存储过程
alter procere pageDemo
@pageSize int,
@page int
AS
declare @temp int
set @temp=@pageSize*(@page - 1)
begin
select top (select @pageSize) * from test where id not in (select top (select @temp) id from test) order by id
end
执行存储过程
exec 10,5

H. sqlserver2008从一个表中模糊查询并分页

select * from (
select * from(
select b.*,rownum rn from bbs b where title like '%呵呵%'
and rownum<=10)
where rn<=分页的上限)
where rn>分页的下限

I. 如何在Sql Server上使用一条SQL查询结果总数并且分页

using System;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;

namespace CountTest
{
class Program
{
static string conStr = "Persist Security Info=False;Integrated Security=true;Initial Catalog=TSQLFundamentals2008;server=(local)";
static long nanosecPerTick = (1000L * 1000L * 1000L) / Stopwatch.Frequency;

static void Main(string[] args)
{
test1();

test2();
}

static void test1()
{
var t1 = Stopwatch.StartNew();
using (SqlConnection conn = new SqlConnection(conStr))
{
conn.Open();
var comCount = new SqlCommand(@"select COUNT(*) from
(select emp.empid,SUM(od.unitprice*od.qty) money
from HR.Employees emp
left join Sales.Orders o on o.empid = emp.empid
left join Sales.OrderDetails od on od.orderid = o.orderid
group by emp.empid
) t", conn);
var count = comCount.ExecuteScalar();
var pageCount = new SqlCommand(@"select empid,money from
(select emp.empid,SUM(od.unitprice*od.qty) money,ROW_NUMBER() over(order by emp.empid) rm
from HR.Employees emp
left join Sales.Orders o on o.empid = emp.empid
left join Sales.OrderDetails od on od.orderid = o.orderid
group by emp.empid
) t where rm between 1 and 20", conn);
var dataAdapter = new SqlDataAdapter(pageCount);
dataAdapter.Fill(new DataTable());
}
t1.Stop();
Console.WriteLine("test1方法耗时:{0}纳秒,{1}毫秒", t1.ElapsedTicks * nanosecPerTick, t1.ElapsedMilliseconds);
}

static void test2()
{
var t2 = Stopwatch.StartNew();
using (SqlConnection conn = new SqlConnection(conStr))
{
conn.Open();

var dTable = new DataTable();
var pageCount = new SqlCommand(@"select empid,money,a from
(select emp.empid,SUM(od.unitprice*od.qty) money,ROW_NUMBER() over(order by emp.empid) rm,COUNT(*) over() a
from HR.Employees emp
left join Sales.Orders o on o.empid = emp.empid
left join Sales.OrderDetails od on od.orderid = o.orderid
group by emp.empid
) t where rm between 1 and 20", conn);
var dataAdapter = new SqlDataAdapter(pageCount);
dataAdapter.Fill(dTable);
var count = dTable.Rows.Count > 0 ? dTable.Rows[0].ItemArray[dTable.Rows[0].ItemArray.Length - 1] : 0;
dTable.Columns.RemoveAt(dTable.Columns.Count - 1);
}
t2.Stop();
Console.WriteLine("test2方法耗时:{0}纳秒,{1}毫秒", t2.ElapsedTicks * nanosecPerTick, t2.ElapsedMilliseconds);
}
}
}