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

服務(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ǔ)充

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 四虎库 | 羞羞视频免费观看网站 | 国内精品伊人久久大香线焦 | 亚洲va欧美va国产va天堂影 | 久久国产视频网站 | 欧美日韩亚洲国内综合网香蕉 | 美女扒开腿让男生桶爽漫画 | 国产v在线在线观看羞羞答答 | 99视频在线观看免费视频 | 激情影院网站 | 色热综合 | freefron性中国 | 99视频网址 | 92在线视频| 精品久久久久香蕉网 | 午夜想想爱午夜剧场 | 午夜宅男宅女看在线观看 | 天天操天天舔 | www.四虎在线观看 | 国语刺激对白勾搭视频在线观看 | 精品一久久香蕉国产线看播放 | 亚洲精品福利在线 | 男人的天堂久久精品激情 | 双性受合不垅腿攻np | 日本精品一卡二卡≡卡四卡 | 视频一区二区三区在线观看 | 久久国产精品人妻中文 | 国产精品久久久久这里只有精品 | 夫妇交换小说 | 亚洲精品永久免费 | 倩女还魂在线观看完整版免费 | 国产伦精品一区二区三区免 | 亚洲天堂在线视频播放 | 亚洲成av人在线视 | 四虎免费在线观看视频 | 国产91在线九色 | 涩涩成人| 欧美精品一国产成人性影视 | 欧美一级欧美三级在线 | 人妖欧美一区二区三区四区 | free service性v极品 |