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);
}
}
}