34,594
社区成员
发帖
与我相关
我的任务
分享
USE tempdb
GO
IF OBJECT_ID('dbo.Proc_PageSearch') IS NOT NULL
DROP PROC dbo.Proc_PageSearch
GO
-- =============================================
-- Author: yenange
-- Create date: 2017-12-01
-- Description: 通用分页存储过程
-- =============================================
CREATE PROCEDURE dbo.Proc_PageSearch
@cols NVARCHAR(MAX)='*' --哪些列
,@tableName NVARCHAR(500)='master.dbo.spt_values' --表名或视图名
,@where NVARCHAR(MAX)='1=1' --where后面的条件,不要加where
,@orderby NVARCHAR(MAX)='' --排序, 不要加order by
,@pageIndex INT=1
,@pageSize INT=10
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sqlTotal NVARCHAR(MAX),@sqlGetData NVARCHAR(MAX)
SET @sqlTotal='select count(1) as cnt from '+@tableName+
(CASE WHEN @where>'' THEN ' where '+ @where ELSE '' END)
SET @sqlGetData='select '+@cols+' from '+@tableName+
(CASE WHEN @where>'' THEN ' where '+ @where ELSE '' END)+
(CASE WHEN @orderby>'' THEN ' order by '+ @orderby ELSE '' END)
+' OFFSET '+CAST((@pageIndex-1)*@pageSize AS VARCHAR(50))+' ROWS FETCH NEXT '+CAST(@pageSize AS VARCHAR(50))+' ROWS ONLY '
--总数
EXEC(@sqlTotal)
--数据
EXEC(@sqlGetData)
END
GO
EXEC Proc_PageSearch
@cols ='*' --哪些列
,@tableName ='master.dbo.spt_values' --表名或视图名
,@where =' [type]=''P'' and [number]>0 ' --where后面的条件,不要加where
,@orderby ='[number]' --排序, 不要加order by
,@pageIndex =2
,@pageSize =10
注:需要 SQL Server2012或更高版本。
但不推荐搞什么分页存储过程, 表面上省了事, 但实际可能带来SQL注入的风险