亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SqlServer 數(shù)據(jù)分頁(yè)的存儲(chǔ)過(guò)程

系統(tǒng) 2470 0
建立表:

CREATE TABLE [TestTable] (
?[ID] [int] IDENTITY (1, 1) NOT NULL ,
?[FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
?[LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
?[Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
?[Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
?

插入數(shù)據(jù): (2 萬(wàn)條,用更多的數(shù)據(jù)測(cè)試會(huì)明顯一些 )
SET IDENTITY_INSERT TestTable ON

declare @i int
set @i=1
while @i<=20000
begin
??? insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, 'FirstName_XXX','LastName_XXX','Country_XXX','Note_XXX')
??? set @i=@i+1
end

SET IDENTITY_INSERT TestTable OFF ?

-------------------------------------

分頁(yè)方案一: ( 利用 Not In SELECT TOP 分頁(yè) )
語(yǔ)句形式:

SELECT TOP 10 *
FROM TestTable
WHERE (ID NOT IN
????????? (SELECT TOP 20 id
???????? FROM TestTable
???????? ORDER BY id))
ORDER BY ID


SELECT TOP
頁(yè)大小 *
FROM TestTable
WHERE (ID NOT IN
????????? (SELECT TOP
頁(yè)大小 * 頁(yè)數(shù)
id
???????? FROM

???????? ORDER BY id))
ORDER BY ID

-------------------------------------

分頁(yè)方案二: ( 利用 ID 大于多少和 SELECT TOP 分頁(yè))
語(yǔ)句形式:
SELECT TOP 10 *
FROM TestTable
WHERE (ID >
????????? (SELECT MAX(id)
???????? FROM (SELECT TOP 20 id
???????????????? FROM TestTable
???????????????? ORDER BY id) AS T))
ORDER BY ID


SELECT TOP
頁(yè)大小 *
FROM TestTable
WHERE (ID >
????????? (SELECT MAX(id)
???????? FROM (SELECT TOP
頁(yè)大小 * 頁(yè)數(shù)
id
???????????????? FROM

???????????????? ORDER BY id) AS T))
ORDER BY ID

-------------------------------------

分頁(yè)方案三: ( 利用 SQL 的游標(biāo)存儲(chǔ)過(guò)程分頁(yè) )
create? procedure XiaoZhengGe
@
sql str nvarchar(4000), --
查詢(xún) 字符
@currentpage int,?--
N 頁(yè)
@pagesize int?--
每頁(yè)行數(shù)
as
set nocount on
declare @P1 int,?--P1
是游標(biāo)的 id
?@rowcount int
exec sp_cursoropen @P1 output,@
sql str,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(
1.0*@rowcount/@pagesize ) as 總頁(yè)數(shù) --,@rowcount as 總行數(shù) ,@currentpage as 當(dāng)前頁(yè) ?
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off

其它的方案:如果沒(méi)有主鍵,可以用臨時(shí)表,也可以用方案三做,但是效率會(huì)低。
建議優(yōu)化的時(shí)候,加上主鍵和索引,查詢(xún)效率會(huì)提高。

通過(guò) SQL 查詢(xún)分析器,顯示比較:我的結(jié)論是 :
分頁(yè)方案二: ( 利用 ID 大于多少和 SELECT TOP 分頁(yè))效率最高,需要拼接 SQL 語(yǔ)句

分頁(yè)方案一: ( 利用 Not In SELECT TOP 分頁(yè) )?? 效率次之,需要拼接 SQL 語(yǔ)句
分頁(yè)方案三: ( 利用 SQL 的游標(biāo)存儲(chǔ)過(guò)程分頁(yè) )??? 效率最差,但是最為通用

在實(shí)際情況中,要具體分析。

?

以下是另一個(gè)存儲(chǔ)過(guò)程的例子.

通常用普通的 SQL 語(yǔ)句查詢(xún)數(shù)據(jù),在數(shù)據(jù)量少的情況下速度上沒(méi)什么感覺(jué),一旦數(shù)居量很大之后,速度會(huì)明顯變慢,因?yàn)榇罅康臄?shù)據(jù)在網(wǎng)絡(luò)中傳輸會(huì)花掉不少的時(shí)間,如果使用了分頁(yè)查詢(xún)數(shù)據(jù),只反回有用的數(shù)據(jù),把不需要的數(shù)據(jù)排除后,傳輸速度會(huì)快很多,如下是一個(gè) SQL 分頁(yè)的存儲(chǔ)過(guò)程,本過(guò)程是以 SQL 自帶的 Northwind 數(shù)據(jù)庫(kù)為例寫(xiě)的,可以根據(jù)自已的需要隨意更改

CREATE
PROCEDURE [GetCustomersDataPage]
@PageIndex
INT , -- 頁(yè)號(hào)

@PageSize
INT , -- 頁(yè)數(shù)
@RecordCount
INT OUT , -- 記錄數(shù)
@PageCount
INT OUT -- 頁(yè)數(shù)
AS
SELECT @RecordCount = COUNT (*) FROM Customers
SET @PageCount = CEILING
(@RecordCount * 1.0 / @PageSize)

DECLARE @SQLSTR NVARCHAR
(1000)

IF @PageIndex = 0 OR
@PageCount <= 1
SET @SQLSTR = 'SELECT TOP ' + STR ( @PageSize )+ ' CustomerID, CompanyName,Address,Phone FROM Customers ORDER BY CustomerID DESC'


ELSE IF @PageIndex = @PageCount - 1
SET @SQLSTR = ' SELECT * FROM ( SELECT TOP ' + STR ( @RecordCount - @PageSize * @PageIndex )+ ' CustomerID, CompanyName,Address,Phone FROM Customers ORDER BY CustomerID ASC ) TempTable ORDER BY CustomerID DESC'


ELSE
SET @SQLSTR = ' SELECT TOP ' + STR ( @PageSize )+ ' * FROM ( SELECT TOP ' + STR ( @RecordCount - @PageSize * @PageIndex )+ ' CustomerID, CompanyName,Address,Phone FROM Customers ORDER BY CustomerID ASC ) TempTable ORDER BY CustomerID DESC'


EXEC (@SQLSTR)

GO

SqlServer 數(shù)據(jù)分頁(yè)的存儲(chǔ)過(guò)程


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 天天做天天爱天天怼 | 九九视频免费 | 一级片在线免费看 | 青青青视频自偷自拍视频1 青青青手机版视频在线观看 | 丁香色综合| 日韩在线一| 国产成人综合亚洲欧美在 | 日韩一级黄色影片 | 亚洲欧洲综合网 | 日韩一区二区视频 | 五月婷婷国产 | 91在线激情在线观看 | 欧美精品国产一区二区三区 | 91中文字幕在线视频 | 亚洲精品一级一区二区三区 | 欧美成人小视频 | 日日摸日日添夜夜爽97 | 九九久久99 | 亚洲精品一区二区三区在线看 | 亚洲精品啪啪一区二区三区 | 人人看操| 99久久免费精品国产免费高清 | 99免费视频观看 | 亚洲成a人v欧美综合天 | 成人看片免费无限观看视频 | 免费观看国产一区二区三区 | 中文字幕伊人 | 亚洲成人免费视频 | 中文字幕91在线 | 日韩欧美第一区二区三区 | 久久精品国产99久久6动漫欧 | 九九九热 | 精品一区二区三区免费毛片爱 | 一级毛片成人午夜 | 久久九九免费 | 久久久久亚洲精品美女 | 日韩一区二区中文字幕 | 夜色资源在线观看免费 | 偷偷鲁影院手机在线观看 | 日韩毛片免费观看 | 久久国产精品99精品国产 |