sql server的分頁查詢存儲過程和調試後的語句記錄

一個sql server的存儲過程,傳參調用,實現分頁查詢功能。

比如名字就叫QueryListByPage

USE [DevDB]
GO
/****** Object:  StoredProcedure [dbo].[QueryListByPage]    Script Date: 2020/1/9 17:43:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

--分頁存儲過程
ALTER PROCEDURE [dbo].[QueryListByPage]  
@sql varchar(max), --表名、視圖名、查詢語句
@pageIndex bigint=1,   --要顯示的頁
@pageSize int=10,   --每頁的大小(行數)
@fieldShow VarChar(500), --要顯示的字段列表(爲空列出所有字段)
@orderBy NVarChar(2000), --排序字段列表
@rows bigint  OUTPUT,      -- 輸出記錄數, 如果@rows爲null, 則輸出記錄數, 否則不要輸出
@param varchar(max) --sql語句中的參數
AS

--declare @strSql varchar(max) -- 主語句
--declare @strTmp varchar(100) -- 臨時變量
--declare @strOrder varchar(400) -- 排序類型
--declare @head VarChar(max)

declare @sqlQuery varchar(max)

if (@fieldShow ='' or @fieldShow is null)
set @fieldShow = '*' 

if (@param is null)
set @param = '' 
 
declare @rowsResult nvarchar(max)
declare @sqlCount nvarchar(max)
set @rowsResult = @param + 'select @rows = count(1) from '+ @sql
exec sp_executesql @rowsResult, N'@rows int out', @rows out

declare @startNumber varchar(20)
declare @endNumber varchar(20)
declare @sqlPage nvarchar(max)
set @startNumber = (@pageSize*(@pageIndex-1)) + 1
set @endNumber = (@pageSize*@pageIndex)
set @sqlPage = @sql
set @sqlPage = stuff(@sqlPage,charindex('(SELECT',@sqlPage),7,'(SELECT row_number() over(order by ' + @orderBy + ' ) as row_num,')
set @sqlPage = REPLACE (@sqlPage,')temp' ,')temp where row_num>=' + @startNumber + ' and row_num<=' + @endNumber)
set @sqlQuery = @param + 'with t_rowtable as ( select' + @fieldShow + ' from ' + @sqlPage + ' ) 
select ' + @fieldShow + ' from t_rowtable'
print @sqlQuery

exec (@sqlQuery)

最終執行的語句:
形如:


with t_rowtable as ( select* from (SELECT row_number() over(order by TableId ) as row_num, * FROM Table1)temp where row_num>=1 and row_num<=10 ) 
select * from t_rowtable

sql server 調試方法:
親測有效@2020年1月9日

sqlserver2008 調試存儲過程

自己隨便搞一個表查一下就知道了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章