一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫(kù)技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫(kù) - Sql Server - 三種SQL分頁(yè)查詢的存儲(chǔ)過(guò)程代碼

三種SQL分頁(yè)查詢的存儲(chǔ)過(guò)程代碼

2019-12-12 16:22MSSQL教程網(wǎng) Sql Server

三種SQL分頁(yè)查詢的存儲(chǔ)過(guò)程代碼,需要的朋友可以參考下。

代碼如下:


--根據(jù)MAX(MIN)ID 
CREATE PROC [dbo].[proc_select_id] 
@pageindex int=1,--當(dāng)前頁(yè)數(shù) 
@pagesize int=10,--每頁(yè)大小 
@tablename VARCHAR(50)='',--表名 
@fields VARCHAR(1000)='',--查詢的字段集合 
@keyid VARCHAR(50)='',--主鍵 
@condition NVARCHAR(1000)='',--查詢條件 
@orderstr VARCHAR(500),--排序條件 
@totalRecord BIGINT OUTPUT--總記錄數(shù) 
AS 
IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC ' 
IF ISNULL(@fields,N'')=N'' SET @fields=N'*' 
IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1' 
DECLARE @sql NVARCHAR(4000) 
--IF(@totalRecord IS NULL) 
--BEGIN 
SET @sql=N'SELECT @totalRecord=COUNT(*)' 
+N' FROM '+@tablename 
+N' WHERE '+@condition 
EXEC sp_executesql @sql,N'@totalRecord INT OUTPUT',@totalRecord OUTPUT 
--END 
IF(@pageindex=1) 
BEGIN 
SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@condition+N' '+@orderstr 
EXEC(@sql) 
END 
ELSE 
BEGIN 
DECLARE @operatestr CHAR(3),@comparestr CHAR(1) 
SET @operatestr='MAX' 
SET @comparestr='>' 
IF(@orderstr<>'') 
BEGIN 
IF(CHARINDEX('desc',LOWER(@orderstr))<>0) 
BEGIN 
SET @operatestr='MIN' 
SET @comparestr='<' 
END 
END 
SET @sql=N'SELECT top '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@keyid+@comparestr 
+N'(SELECT '+@operatestr+N'('+@keyid+N') FROM '+@tablename+N' WHERE '+@keyid 
+N' IN (SELECT TOP '+STR((@pageindex-1)*@pagesize)+N' '+@keyid+N' FROM '+@tablename+N' WHERE ' 
+@condition+N' '+@orderstr+N')) AND '+@condition+N' '+@orderstr 
EXEC(@sql) 
END 
GO 


--根據(jù)ROW_NUMBER() OVER 
CREATE PROC [dbo].[proc_select_page_row] 
@pageindex INT=1,--當(dāng)前頁(yè)數(shù) 
@pagesize INT=10,--每頁(yè)大小 
@tablename VARCHAR(50)='',--表名 
@fields VARCHAR(1000)='*',--查詢的字段集合 
@keyid VARCHAR(50)='',--主鍵 
@condition NVARCHAR(1000)='',--查詢條件 
@orderstr VARCHAR(500),--排序條件 
@totalRecord BIGINT OUTPUT--總記錄數(shù) 
AS 
IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC ' 
IF ISNULL(@fields,N'')=N'' SET @fields=N'*' 
IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1' 
DECLARE @sql NVARCHAR(4000) 
-- IF @totalRecord IS NULL 
-- BEGIN 
SET @sql=N'SELECT @totalRecord=COUNT(*)' 
+N' FROM '+@tablename 
+N' WHERE '+@condition 
EXEC sp_executesql @sql,N'@totalRecord bigint OUTPUT',@totalRecord OUTPUT 
--END 
IF(@pageindex=1) 
BEGIN 
SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@condition+N' '+@orderstr 
EXEC(@sql) 
END 
ELSE 
BEGIN 
DECLARE @StartRecord INT 
SET @StartRecord = (@pageindex-1)*@pagesize + 1 
SET @sql=N'SELECT * FROM (SELECT ROW_NUMBER() OVER ('+ @orderstr +N') AS rowId,'+@fields+N' FROM '+ @tablename+N') AS T WHERE rowId>='+STR(@StartRecord)+N' and rowId<='+STR(@StartRecord + @pagesize - 1) 
EXEC(@sql) 
END 
GO 


--根據(jù)TOP ID 
CREATE PROC [dbo].[proc_select_page_top] 
@pageindex INT=1,--當(dāng)前頁(yè)數(shù) 
@pagesize INT=10,--每頁(yè)大小 
@tablename VARCHAR(50)='',--表名 
@fields VARCHAR(1000)='',--查詢的字段集合 
@keyid VARCHAR(50)='',--主鍵 
@condition NVARCHAR(1000)='',--查詢條件 
@orderstr VARCHAR(500),--排序條件 
@totalRecord BIGINT OUTPUT--總記錄數(shù) 
AS 
IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC ' 
IF ISNULL(@fields,N'')=N'' SET @fields=N'*' 
IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1' 
DECLARE @sql NVARCHAR(4000) 
--IF(@totalRecord IS NULL) 
--BEGIN 
SET @sql=N'SELECT @totalRecord=COUNT(*)' 
+N' FROM '+@tablename 
+N' WHERE '+@condition 
EXEC sp_executesql @sql,N'@totalRecord INT OUTPUT',@totalRecord OUTPUT 
--END 
IF(@pageindex=1) 
BEGIN 
SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@condition+N' '+@orderstr 
EXEC(@sql) 
END 
ELSE 
BEGIN 
SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@keyid 
+N' NOT IN(SELECT TOP '+STR((@pageindex-1)*@pagesize)+N' '+@keyid+N' FROM ' 
+@tablename+N' WHERE '+@condition+N' '+@orderstr+N') AND '+@condition+N' '+@orderstr 
EXEC(@sql) 
END 
GO 

如對(duì)本文有所疑義或者對(duì)本文內(nèi)容提供補(bǔ)充

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 大学第一次基本都没了 | 嫩草在线视频www免费观看 | 色综合色狠狠天天久久婷婷基地 | 国产51社区精品视频资源 | 国四虎影永久 | 国产精品一区二区三区免费 | 日本在线观看视频 | 国产高清一区二区三区免费视频 | 草莓视频幸福宝 | 亚洲视频在线观看地址 | 34g污奶跳舞 | 黑人巨大爆粗亚裔女人 | 大胸纲手被羞羞漫画网站 | 亚洲精品在线播放 | 亚洲大片免费观看 | 久久午夜夜伦痒痒想咳嗽P 久久无码AV亚洲精品色午夜麻豆 | 久久99国产亚洲高清观着 | 亚洲男人天堂网址 | 亚洲精品第一国产综合 | 欧美伊人影院 | 好猛好紧好硬使劲好大刺激视频 | china国产bbw| 99国产情在线视频 | 啊好痛嗯轻一点免费 | 亚洲国产日韩欧美一区二区三区 | 无人区在线观看免费观看 | 忘忧草在线 | 日本一本草久p | 欧美一区二区三区免费高 | 水多多www视频在线观看高清 | 99视频一区 | 爽好大快深点一视频 | 欧美一级在线视频 | 91在线高清视频 | 欧美精品一区二区在线观看 | 午夜在线观看免费观看 视频 | 精品无人区乱码1区2区3区免费 | 性xxxx中国老妇506070 | 日本在线小视频 | 色综色天天综合网 | 999久久久免费精品国产牛牛 |