數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程分頁(yè)顯示
更新時(shí)間:2006年08月24日 00:00:00 作者:
注:需要建立索引
/*
經(jīng)測(cè)試,在 14483461 條記錄中查詢第 100000 頁(yè),每頁(yè) 10 條記錄按升序和降序第一次時(shí)間均為 0.47 秒,第二次時(shí)間均為 0.43 秒,測(cè)試語(yǔ)法如下:
exec GetRecordFromPage news,newsid,10,100000
news 為 表名, newsid 為關(guān)鍵字段, 使用時(shí)請(qǐng)先對(duì) newsid 建立索引。
*/
/*
函數(shù)名稱: GetRecordFromPage
函數(shù)功能: 獲取指定頁(yè)的數(shù)據(jù)
參數(shù)說(shuō)明: @tblName 包含數(shù)據(jù)的表名
@fldName 關(guān)鍵字段名
@PageSize 每頁(yè)記錄數(shù)
@PageIndex 要獲取的頁(yè)碼
@OrderType 排序類型, 0 - 升序, 1 - 降序
@strWhere 查詢條件 (注意: 不要加 where)
作 者: 鐵拳
郵 箱: unjianhua_kki@sina.com">sunjianhua_kki@sina.com
創(chuàng)建時(shí)間: 2004-07-04
修改時(shí)間: 2004-07-04
*/
Create PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 字段名
@PageSize int = 10, -- 頁(yè)尺寸
@PageIndex int = 1, -- 頁(yè)碼
@OrderType bit = 0, -- 設(shè)置排序類型, 非 0 值則降序
@strWhere varchar(2000) = '' -- 查詢條件 (注意: 不要加 where)
AS
declare @strSQL varchar(6000) -- 主語(yǔ)句
declare @strTmp varchar(1000) -- 臨時(shí)變量
declare @strOrder varchar(500) -- 排序類型
if @OrderType != 0
begin
set @strTmp = "<(select min"
set @strOrder = " order by [" + @fldName +"] desc"
end
else
begin
set @strTmp = ">(select max"
set @strOrder = " order by [" + @fldName +"] asc"
end
set @strSQL = "select top " + str(@PageSize) + " * from ["
+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
+ @strOrder
if @strWhere != ''
set @strSQL = "select top " + str(@PageSize) + " * from ["
+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @fldName + "] from [" + @tblName + "] where " + @strWhere + " "
+ @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder
if @PageIndex = 1
begin
set @strTmp = ""
if @strWhere != ''
set @strTmp = " where (" + @strWhere + ")"
set @strSQL = "select top " + str(@PageSize) + " * from ["
+ @tblName + "]" + @strTmp + " " + @strOrder
end
exec (@strSQL)
GO
復(fù)制代碼 代碼如下:
/*
經(jīng)測(cè)試,在 14483461 條記錄中查詢第 100000 頁(yè),每頁(yè) 10 條記錄按升序和降序第一次時(shí)間均為 0.47 秒,第二次時(shí)間均為 0.43 秒,測(cè)試語(yǔ)法如下:
exec GetRecordFromPage news,newsid,10,100000
news 為 表名, newsid 為關(guān)鍵字段, 使用時(shí)請(qǐng)先對(duì) newsid 建立索引。
*/
/*
函數(shù)名稱: GetRecordFromPage
函數(shù)功能: 獲取指定頁(yè)的數(shù)據(jù)
參數(shù)說(shuō)明: @tblName 包含數(shù)據(jù)的表名
@fldName 關(guān)鍵字段名
@PageSize 每頁(yè)記錄數(shù)
@PageIndex 要獲取的頁(yè)碼
@OrderType 排序類型, 0 - 升序, 1 - 降序
@strWhere 查詢條件 (注意: 不要加 where)
作 者: 鐵拳
郵 箱: unjianhua_kki@sina.com">sunjianhua_kki@sina.com
創(chuàng)建時(shí)間: 2004-07-04
修改時(shí)間: 2004-07-04
*/
Create PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 字段名
@PageSize int = 10, -- 頁(yè)尺寸
@PageIndex int = 1, -- 頁(yè)碼
@OrderType bit = 0, -- 設(shè)置排序類型, 非 0 值則降序
@strWhere varchar(2000) = '' -- 查詢條件 (注意: 不要加 where)
AS
declare @strSQL varchar(6000) -- 主語(yǔ)句
declare @strTmp varchar(1000) -- 臨時(shí)變量
declare @strOrder varchar(500) -- 排序類型
if @OrderType != 0
begin
set @strTmp = "<(select min"
set @strOrder = " order by [" + @fldName +"] desc"
end
else
begin
set @strTmp = ">(select max"
set @strOrder = " order by [" + @fldName +"] asc"
end
set @strSQL = "select top " + str(@PageSize) + " * from ["
+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
+ @strOrder
if @strWhere != ''
set @strSQL = "select top " + str(@PageSize) + " * from ["
+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @fldName + "] from [" + @tblName + "] where " + @strWhere + " "
+ @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder
if @PageIndex = 1
begin
set @strTmp = ""
if @strWhere != ''
set @strTmp = " where (" + @strWhere + ")"
set @strSQL = "select top " + str(@PageSize) + " * from ["
+ @tblName + "]" + @strTmp + " " + @strOrder
end
exec (@strSQL)
GO
相關(guān)文章
MS SQL Server獲取十二個(gè)月份的英文縮寫(xiě)
十二個(gè)月份的英文縮寫(xiě),只有五月份是全稱與縮寫(xiě)一樣,其它月份的縮寫(xiě)僅是取前三位字母。因此Insus.NET寫(xiě)成一個(gè)自定義函數(shù)獲取月份名稱縮寫(xiě),感興趣的朋友可以了解下2013-01-01sql 函數(shù)大全 比較常用的一些函數(shù)整理
學(xué)習(xí)sqlserver的朋友,可以參考下,掌握這些函數(shù)可以方便的對(duì)字段的字符進(jìn)行處理。2010-04-04大容量csv快速內(nèi)導(dǎo)入sqlserver的解決方法(推薦)
最近遇到這樣的問(wèn)題:導(dǎo)入csv 數(shù)據(jù),并對(duì)導(dǎo)入的數(shù)據(jù)增加一個(gè)新的列date datetime,下面通過(guò)本文給大家分享大容量csv快速內(nèi)導(dǎo)入sqlserver的解決方法,感興趣的朋友一起看看吧2017-07-07sqlserver2005 行列轉(zhuǎn)換實(shí)現(xiàn)方法
sqlserver2005 行列轉(zhuǎn)換實(shí)現(xiàn)方法,需要的朋友可以參考下。2009-10-10SQL Server 索引結(jié)構(gòu)及其使用(一)--深入淺出理解索引結(jié)構(gòu)
深入淺出理解索引結(jié)構(gòu)2009-04-04SQL?Server中實(shí)現(xiàn)錯(cuò)誤處理
這篇文章介紹了SQL?Server中實(shí)現(xiàn)錯(cuò)誤處理的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05SQL語(yǔ)句練習(xí)實(shí)例之七 剔除不需要的記錄行
相信大家肯定經(jīng)常會(huì)把數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)中,但是可能會(huì)有些記錄行的所有列的數(shù)據(jù)是null,這為null的數(shù)據(jù)是我們不需要2011-10-10