佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > MsSql 存儲(chǔ)過(guò)程分頁(yè)代碼 [收集多篇]

MsSql 存儲(chǔ)過(guò)程分頁(yè)代碼 [收集多篇]

熱門標(biāo)簽:服務(wù)外包 AI電銷 鐵路電話系統(tǒng) 網(wǎng)站排名優(yōu)化 呼叫中心市場(chǎng)需求 地方門戶網(wǎng)站 Linux服務(wù)器 百度競(jìng)價(jià)排名
復(fù)制代碼 代碼如下:

--使用說(shuō)明 本代碼適用于MsSql2000,對(duì)于其它數(shù)據(jù)庫(kù)也可用.但沒(méi)必要
--創(chuàng)建存儲(chǔ)過(guò)程
CREATE PROCEDURE pagination
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名(可包含如TABLE.FLDNAME形式)
@PageSize int = 10, -- 頁(yè)尺寸
@PageIndex int = 1, -- 頁(yè)碼
@doCount bit = 0, -- 返回記錄總數(shù), 非 0 值則返回
@OrderType bit = 0, -- 設(shè)置排序類型, 非 0 值則降序
@strWhere varchar(1500) = '' -- 查詢條件 (注意: 不要加 where)
AS
declare @strSQL varchar(5000) -- 主語(yǔ)句
declare @strTmp varchar(110) -- 臨時(shí)變量
declare @strOrder varchar(400) -- 排序類型
declare @fldName_t varchar(255) -- 在分頁(yè)時(shí)用的排序字段名,不包含多表并列時(shí)的表名
set @fldName_t = right(@fldName,len(@fldName)-CHARINDEX('.',@fldName))
if @doCount != 0
begin
if @strWhere !=''
set @strSQL = 'select count(*) as Total from ' + @tblName + ' where '+@strWhere
else
set @strSQL = 'select count(*) as Total from ' + @tblName + ''
end
--以上代碼的意思是如果@doCount傳遞過(guò)來(lái)的不是0,就執(zhí)行總數(shù)統(tǒng)計(jì)。以下的所有代碼都是@doCount為0的情況
else
begin
if @OrderType != 0
begin
set @strTmp = '(select min'
set @strOrder = ' order by ' + @fldName +' desc'
--如果@OrderType不是0,就執(zhí)行降序,這句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @fldName +' asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder
--如果是第一頁(yè)就執(zhí)行以上代碼,這樣會(huì)加快執(zhí)行速度
end
else
begin
--以下代碼賦予了@strSQL以真正執(zhí)行的SQL代碼
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' where ' + @fldName + ' ' + @strTmp + ' ('+ @fldName_t + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @fldName + ' from ' + @tblName + '' + @strOrder + ') as tblTmp)'+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' where ' + @fldName + ' ' + @strTmp + ' ('+ @fldName_t + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' '+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
end
exec (@strSQL)
go
--測(cè)試
create table news --建表
(
n_id int iDENTITY(1,1) primary key,
n_title char(200),
n_content text
)
--寫(xiě)循環(huán)插入1000000條的數(shù)據(jù)
create proc tt
as
declare @i int
set @i=0
while(@i1000000)
begin
insert into news(n_title,n_content) values('sb','dsfsdfsd')
set @i=@i+1
end
exec tt
exec pagination 'news','*','n_id',1000,2,0,0,''


第二篇

復(fù)制代碼 代碼如下:

自己改寫(xiě)的一個(gè)分頁(yè)存儲(chǔ)過(guò)程
CREATE PROC Paging
(
@pageSize int,
@pageIndex int,
@pageField nvarchar(32),
@countTotal bit=1,
@fieldQuery nvarchar(512),
@tableQuery nvarchar(512),
@whereQuery nvarchar(2048),
@orderQuery nvarchar(512)
)
AS
DECLARE @bdate Datetime
SET @bdate = getdate()
DECLARE @itemcount int
SET @itemcount=@pageIndex*@pageSize
DECLARE @itemlowwer int
SET @itemlowwer=(@pageIndex-1)*@pageSize
DECLARE @cmd nvarchar(3062)

IF @pageIndex=1
SET @cmd ='SELECT TOP ‘+CAST(@pageSize AS NVARCHAR)+' ‘+@fieldQuery+' FROM ‘+@tableQuery+' WHERE ‘+@whereQuery+' ORDER BY ‘+@orderQuery
ELSE
SET @cmd='SELECT ‘+@fieldQuery+' FROM ‘+@tableQuery+' WHERE ‘+@pageField+' IN (SELECT TOP ‘+CAST(@itemcount as nvarchar)+' ‘+@pageField+' FROM ‘+@tableQuery+' WHERE ‘+@whereQuery+' ORDER BY ‘+ @orderQuery+')
AND ‘+@pageField+' NOT IN (SELECT TOP ‘ +CAST(@itemlowwer as nvarchar)+' ‘+@pageField+' FROM ‘+@tableQuery+' WHERE ‘+@whereQuery+' ORDER BY ‘+ @orderQuery+')'
–print @cmd
EXEC(@cmd)

SELECT DATEDIFF( ms , @bdate , getdate() )

IF @countTotal =1
BEGIN
SET @cmd = ‘SELECT COUNT( 0) FROM ‘+@tableQuery+' WHERE ‘+@whereQuery
EXEC(@cmd)
END
GO
您可能感興趣的文章:
  • mssql 高效的分頁(yè)存儲(chǔ)過(guò)程分享
  • MSSQL MySQL 數(shù)據(jù)庫(kù)分頁(yè)(存儲(chǔ)過(guò)程)
  • 淺談基于SQL Server分頁(yè)存儲(chǔ)過(guò)程五種方法及性能比較
  • 五種SQL Server分頁(yè)存儲(chǔ)過(guò)程的方法及性能比較
  • SQL Server 分頁(yè)查詢通用存儲(chǔ)過(guò)程(只做分頁(yè)查詢用)
  • sqlserver2005利用臨時(shí)表和@@RowCount提高分頁(yè)查詢存儲(chǔ)過(guò)程性能示例分享
  • SQL Server的通用分頁(yè)存儲(chǔ)過(guò)程 未使用游標(biāo),速度更快!
  • sqlserver 存儲(chǔ)過(guò)程分頁(yè)(按多條件排序)
  • MSSQL分頁(yè)存儲(chǔ)過(guò)程完整示例(支持多表分頁(yè)存儲(chǔ))

標(biāo)簽:仙桃 蘭州 崇左 湘潭 湖南 銅川 衡水 黃山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MsSql 存儲(chǔ)過(guò)程分頁(yè)代碼 [收集多篇]》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    嘉黎县| 浏阳市| 大石桥市| 张家港市| 兴山县| 确山县| 简阳市| 清丰县| 平舆县| 南投市| 武鸣县| 盐城市| 工布江达县| 昂仁县| 拜泉县| 新龙县| 屏南县| 名山县| 彭山县| 镇原县| 莱阳市| 威海市| 驻马店市| 洞口县| 顺昌县| 咸宁市| 广丰县| 徐汇区| 新巴尔虎右旗| 沅江市| 新晃| 安龙县| 建阳市| 台湾省| 会东县| 英超| 田林县| 互助| 晴隆县| 咸阳市| 渭南市|