亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

分頁存儲過程(三)在sqlserver中打造更加準確的分頁結果

2024-08-31 00:58:48
字體:
來源:轉載
供稿:網友
有人提出游標不好,會鎖定行,幸虧我鎖定的是臨時表,不是數據表,不影響數據表的寫操作。

下面是14樓的回復,讓我茅塞頓開,于是有了今天的改進版,取消了游標的使用,臨時表還是存在的,謝謝。

其實你只要分成兩次查詢即可:
1, 還是用Row_Number查主表分頁
2, Row_Number查主表分頁 inner join 明細表..用不到游標的.

復制代碼 代碼如下:


--不用游標的分頁
--先將分頁的主表放在臨時表中,然后用臨時表和子表聯合查詢,來獲取子表信息
--既保證了分頁的正確性,也包括了子表信息
CREATE TABLE #order
(
number BIGINT,
orderseqno VARCHAR(36),
)
insert into #order
SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY oi.CreateDate DESC) AS rownumber,oi.OrderSeqNO
FROM OrderInfo oi WHERE oi.OrderSeqNO LIKE '%2%' ) AS o
WHERE o.rownumber BETWEEN 10 AND 20

SELECT * FROM #order INNER JOIN OrderDetail od ON od.OrderSeqNO=#order.orderseqno

DROP TABLE #order



復制代碼 代碼如下:


--SELECT TOP 10 oi.OrderSeqNO, oi.GoodsName ,ci.CompanyName,od.*
--FROM OrderInfo oi INNER JOIN CompanyInfo ci ON oi.CompanyID=ci.CompanyID
--LEFT JOIN OrderDetail od ON oi.OrderSeqNO=od.OrderSeqNO


--使用row_unmber()實現分頁
--本來我們想要的結果是10條訂單,結果卻不是10條訂單,而是10條明細
--其實是針對的子表進行分頁了,訂單并不是要顯示的個數,出來的個數是明細的個數
--就是因為主表和子表聯合查詢的結果,主表記錄和子表記錄是1:N的關系,一個主表記錄有多個明細

--建立聚集索引
-- CLUSTERED INDEX INDEX_OrderInfo ON OrderInfo (OrderSeqNo)
--顯示查詢執行計劃
--SET STATISTICS IO ON

select * from
(SELECT ROW_NUMBER () OVER (ORDER BY oi.createdate DESC) AS rownumber,oi.orderseqno ,od.OrderDetailID
FROM OrderInfo oi LEFT JOIN OrderDetail od ON oi.OrderSeqNO=od.OrderSeqNO
WHERE oi.OrderSeqNO LIKE '%2%'
) AS o
WHERE rownumber BETWEEN 10 AND 20

--不用游標的分頁
--先將分頁的主表放在臨時表中,然后用臨時表和子表聯合查詢,來獲取子表信息
--既保證了分頁的正確性,也包括了子表信息
CREATE TABLE #order
(
number BIGINT,
orderseqno VARCHAR(36),
)
insert into #order
SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY oi.CreateDate DESC) AS rownumber,oi.OrderSeqNO
FROM OrderInfo oi WHERE oi.OrderSeqNO LIKE '%2%' ) AS o
WHERE o.rownumber BETWEEN 10 AND 20

SELECT * FROM #order INNER JOIN OrderDetail od ON od.OrderSeqNO=#order.orderseqno

DROP TABLE #order
--解決上面的問題,有以下幾種辦法
--1、先根據條件查詢主表記錄,然后在C#代碼中循環,再次到數據庫查詢每條主表記錄的明細信息,然后賦值給屬性
--2、在數據庫的存儲過程中使用游標,也是先查詢主表記錄,然后使用游標循環的過程中,查詢子表信息,然后在C#中
--集中處理
--很顯然,后一種減少了數據庫的往來開銷,一次獲取了想要的數據,個人認為要比第一種好,歡迎大家一起討論更好的辦法

--需要注意的就是ROW_NUMBER()返回的類型是bigint,而不是int
--下面是游標的存儲過程


--建立主表臨時表
CREATE TABLE #temp
(
rownumber bigint,
orderseqno VARCHAR(36),
goodsname VARCHAR(50),
companyname VARCHAR(100)
)
--建立子表臨時表
CREATE TABLE #detail
(
orderseqno VARCHAR(36),
detailid UNIQUEIDENTIFIER,
unitprice DECIMAL(12,2),
Qty int
)
--插入主表數據到主表臨時表

insert into #temp
SELECT *
--oo.rownumber, oo.OrderSeqNO, oo.GoodsName, oo.CompanyName
FROM
(SELECT ROW_NUMBER () OVER (ORDER BY oi.createdate DESC) AS rownumber,
oi.OrderSeqNO, oi.GoodsName ,ci.CompanyName
FROM OrderInfo oi INNER JOIN CompanyInfo ci ON oi.CompanyID=ci.CompanyID
WHERE oi.CreateDate<GETDATE()
) AS oo
WHERE rownumber BETWEEN 10 AND 20

--定義游標
DECLARE @temp_cursor CURSOR
--給游標賦值
SET @temp_cursor=CURSOR FOR SELECT #temp.orderseqno,#temp.goodsname FROM #temp

--定義游標循環過程中所需保存的臨時數據
DECLARE @orderseqno VARCHAR(36),@goodsname varchar(50)

--打開游標
OPEN @temp_cursor

FETCH NEXT FROM @temp_cursor INTO @orderseqno,@goodsname
--循環游標,查詢子表數據,然后插入子表臨時表
WHILE @@FETCH_STATUS=0
BEGIN
INSERT INTO #detail
SELECT od.OrderSeqNO,od.OrderDetailID, od.UnitPrice,od.Qty
FROM OrderDetail od
WHERE od.OrderSeqNO=@orderseqno

FETCH NEXT FROM @temp_cursor INTO @orderseqno,@goodsname
END

--關閉游標
CLOSE @temp_cursor
DEALLOCATE @temp_cursor

SELECT * FROM #temp
SELECT * FROM #detail
--刪除臨時表
DROP TABLE #temp
DROP TABLE #detail

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品稀缺呦系列在线| 国产一区二区日韩精品欧美精品| xxxx欧美18另类的高清| 成人做爰www免费看视频网站| 国产精品久在线观看| 久久成年人免费电影| 欧美日韩亚洲一区二| 97在线看免费观看视频在线观看| 国产一区二区三区在线视频| 51午夜精品视频| 欧美一区二三区| 日韩在线观看免费全集电视剧网站| 国产精品久久久久久久久久尿| 成人高h视频在线| 午夜精品福利视频| 亚洲国产精品女人久久久| 色诱女教师一区二区三区| 欧美性猛交xxxx乱大交蜜桃| 久久99热精品| 亚洲午夜未满十八勿入免费观看全集| 成人欧美在线观看| 日韩电影在线观看中文字幕| 91亚洲精品一区二区| 成人久久18免费网站图片| 欧洲美女7788成人免费视频| 精品亚洲国产成av人片传媒| 国产精品女人网站| 26uuu日韩精品一区二区| 国产日韩在线一区| 992tv成人免费影院| 久久躁狠狠躁夜夜爽| 国产成人精品久久| 欧美午夜精品久久久久久人妖| 日韩欧美精品免费在线| 久久全球大尺度高清视频| 国产精品白嫩美女在线观看| 琪琪亚洲精品午夜在线| 欧美超级乱淫片喷水| 热久久99这里有精品| 色琪琪综合男人的天堂aⅴ视频| 亚洲成人网在线| 北条麻妃99精品青青久久| 亚洲曰本av电影| 国产精品日韩在线观看| 4388成人网| 欧美成人精品在线| 亚洲精品www久久久久久广东| 欧美日韩国产影院| 亚洲最大福利视频网| 久久久这里只有精品视频| 这里只有精品视频在线| 亚洲成人黄色网| 岛国av一区二区三区| 久久久久久久999精品视频| 欧美综合一区第一页| 国产精品视频午夜| 久久久电影免费观看完整版| 精品国产福利视频| 欧美日韩性生活视频| 成人午夜在线视频一区| 韩日欧美一区二区| 亚洲成人三级在线| 亚洲情综合五月天| 欧美国产视频日韩| 性欧美视频videos6一9| 亚洲色图50p| 欧美视频13p| 欧美日韩视频在线| 2019日本中文字幕| 日韩亚洲国产中文字幕| 欧洲成人性视频| 黑人与娇小精品av专区| 亚洲91精品在线| 91精品国产91久久久久久| 日韩精品视频中文在线观看| 国产91色在线播放| 一区二区三区久久精品| 这里只有精品视频| 日韩久久午夜影院| 欧美精品18videosex性欧美| 国产精品久久久久久久久久久久久| 2021国产精品视频| 亚洲va久久久噜噜噜久久天堂| 国产亚洲精品综合一区91| 在线观看91久久久久久| 亚洲免费人成在线视频观看| 欧美亚洲日本黄色| 色偷偷9999www| 神马国产精品影院av| 色偷偷88888欧美精品久久久| 国产成人福利夜色影视| 亚洲乱码一区av黑人高潮| 欧美激情成人在线视频| 亚洲天堂视频在线观看| 亚洲成人久久久| 国产欧美日韩综合精品| 国产亚洲福利一区| 久久精品国产v日韩v亚洲| yw.139尤物在线精品视频| 日韩一区二区久久久| 国产精品久久激情| 粉嫩老牛aⅴ一区二区三区| 91精品国产自产在线老师啪| 国产精自产拍久久久久久| 日韩小视频在线| 国产精品免费久久久| 亚洲伊人久久大香线蕉av| 最近2019年手机中文字幕| 日韩午夜在线视频| 久久久久久国产精品美女| 日韩成人激情视频| 久国内精品在线| 欧美日韩电影在线观看| www.久久草.com| 欧美性jizz18性欧美| 992tv在线成人免费观看| 亚洲精品黄网在线观看| 久久久噜噜噜久久久| 亚洲一二三在线| 色综合色综合网色综合| 国产精品久久久久久久久免费| 欧美午夜性色大片在线观看| 成人在线激情视频| 亚洲一区二区三区xxx视频| 国产亚洲精品va在线观看| 欧美性一区二区三区| 亚洲乱码国产乱码精品精| 日韩精品视频在线| 国产91精品久久久久| 粗暴蹂躏中文一区二区三区| 久久亚洲综合国产精品99麻豆精品福利| 亚洲一区二区三区乱码aⅴ| 亚洲人成毛片在线播放| 国产精品1区2区在线观看| 日韩精品一区二区三区第95| 日韩欧美中文字幕在线播放| 日韩精品在线第一页| 国产日韩精品电影| 亚洲人成伊人成综合网久久久| 欧美影院成年免费版| 91精品久久久久久久久久久| 欧美激情亚洲自拍| 日韩av在线一区| 欧美大片第1页| 久久精品欧美视频| 国产精自产拍久久久久久蜜| 亚洲va欧美va国产综合剧情| 自拍偷拍亚洲一区| 欧美性猛交xxxx乱大交3| 亚洲国产精品va在看黑人| 亚洲香蕉av在线一区二区三区| 国产亚洲人成a一在线v站| 欧美激情一区二区三区久久久| 久久99国产精品久久久久久久久| 伊人伊人伊人久久| 国产精品日韩电影| 成人亚洲激情网| 国产精品69av| 久久国产精品免费视频| 久久综合国产精品台湾中文娱乐网| 国产欧美一区二区白浆黑人| 国产精品久久久久高潮| 搡老女人一区二区三区视频tv| 在线看日韩欧美|