拋磚引玉——通用分頁儲存過程
以前用的sqlserver2000,寫了一個通用分頁儲存過程,傳進去一個sql語句、頁碼、頁大小就能進行分頁,最近公司升級sqlserver2005,就把以前的改了改,從執行計劃和統計的各項計數來看效能比以前好了。
正好今天有人探討這個話題,我就也貼上來分享一下,歡迎批評指正,要是能提些改進建議那最好不過了。
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->CREATE PROCEDURE [dbo].[PageView]
@select VARCHAR(max),
@CurrentPage INT,
@PageSize INT
AS
BEGIN
declare @sql NVARCHAR(max)
DECLARE @RecordCurrent INT
DECLARE @PageCount INT
DECLARE @RecordCount INT
SET NOCOUNT ON
set @sql='select @RecordCount=count(*) from ('+@select+') a'
exec sp_executesql @sql,N'@RecordCount int output',@RecordCount output
SET @PageCount=(@RecordCount+@PageSize-1)/@PageSize
IF ISNULL(@CurrentPage,0)<1
SET @CurrentPage=1
ELSE if ISNULL(@CurrentPage,0)>@PageCount
SET @CurrentPage=@PageCount
SELECT @CurrentPage AS CurrentPage,@RecordCount AS RecordCount,@PageSize AS PageSize,@PageCount AS PageCount
set @sql='select * from ('+@select+') a where rownumber between '+cast((@CurrentPage-1)*@PageSize+1 as varchar)+' and '+cast(@CurrentPage*@PageSize as varchar)
exec (@sql)
END
@select VARCHAR(max),
@CurrentPage INT,
@PageSize INT
AS
BEGIN
declare @sql NVARCHAR(max)
DECLARE @RecordCurrent INT
DECLARE @PageCount INT
DECLARE @RecordCount INT
SET NOCOUNT ON
set @sql='select @RecordCount=count(*) from ('+@select+') a'
exec sp_executesql @sql,N'@RecordCount int output',@RecordCount output
SET @PageCount=(@RecordCount+@PageSize-1)/@PageSize
IF ISNULL(@CurrentPage,0)<1
SET @CurrentPage=1
ELSE if ISNULL(@CurrentPage,0)>@PageCount
SET @CurrentPage=@PageCount
SELECT @CurrentPage AS CurrentPage,@RecordCount AS RecordCount,@PageSize AS PageSize,@PageCount AS PageCount
set @sql='select * from ('+@select+') a where rownumber between '+cast((@CurrentPage-1)*@PageSize+1 as varchar)+' and '+cast(@CurrentPage*@PageSize as varchar)
exec (@sql)
END
呼叫
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->exec PageView 'select userid,username,row_number() over(order by userid desc) as rownumber from Users',2,10
缺點很顯然'select userid,username,row_number() over(order by userid desc) as rownumber from Users',這裡要提供rownumber 列
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-622140/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 通用分頁儲存過程儲存過程
- 拋磚引玉:拷貝物件,CopyObject物件Object
- SQLServer 2005通用分頁儲存過程SQLServer儲存過程
- 分頁儲存過程儲存過程
- SQL 分頁儲存過程SQL儲存過程
- sql儲存過程分頁SQL儲存過程
- C#中的委託和事件-拋磚引玉C#事件
- SqlServer-儲存過程分頁SQLServer儲存過程
- 通用的SQL Server資料庫查詢分頁儲存過程SQLServer資料庫儲存過程
- 支援DISTINCT的通用分頁儲存過程(SQL2005)儲存過程SQL
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- 拋棄以往分頁方式,改用ROW_NUMBER()加BETWEEN方式的分頁儲存過程,特此分享儲存過程
- oracle儲存過程分頁程式碼Oracle儲存過程
- (SQL Server)分頁的儲存過程SQLServer儲存過程
- 簡單的儲存過程分頁儲存過程
- 簡單的分頁儲存過程儲存過程
- Oracle 儲存過程分頁 + Sqlsugar呼叫Oracle儲存過程SqlSugar
- 兩種SQL分頁方法儲存過程和遊標儲存過程SQL儲存過程
- Flutter解析複雜JSON泛型方案--拋磚引玉篇FlutterJSON泛型
- sqlserver儲存過程實現多表分頁SQLServer儲存過程
- 分頁控制元件及儲存過程控制元件儲存過程
- [MSSQL]mssql海量高效分頁儲存過程SQL儲存過程
- ORACLE高效分頁儲存過程程式碼Oracle儲存過程
- 基於ROWCOUNT的分頁儲存過程儲存過程
- 拋磚引玉,AsProtect 修正 import表的一些想法 (579字)Import
- 使用儲存過程實現分頁列印 (轉)儲存過程
- SQL SERVER 2005分頁儲存過程SQLServer儲存過程
- 實現小資料量和海量資料的通用分頁顯示儲存過程儲存過程
- 分享一下自己的簡歷, 拋磚引玉歡迎討論
- 儲存過程分頁 Ado.Net分頁 EF分頁 滿足90%以上儲存過程
- SQL Server 儲存過程的經典分頁(轉)SQLServer儲存過程
- asp.net利用儲存過程分頁程式碼ASP.NET儲存過程
- mysql儲存過程的引數MySql儲存過程
- 完整的分頁儲存過程以及c#呼叫方法儲存過程C#
- 一個比較不錯的儲存過程分頁儲存過程
- [Procedure]Oracle之分頁儲存過程Oracle儲存過程
- oracle父儲存過程呼叫子儲存過程procedure與輸出引數Oracle儲存過程
- 淺述asp.net海量分頁資料儲存過程ASP.NET儲存過程