IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'sp_Pages')
BEGIN
PRINT N'删除存储过程 sp_Pages'
DROP PROCEDURE sp_Pages
END
GO
PRINT N'生成存储过程 sp_Pages'
GO
CREATE PROCEDURE sp_Pages
@Table nvarchar(4000), -- 表名
@Where nvarchar(4000) = N'', -- 条件
@PageSize int, -- 每页的大小(行数)
@Page int, -- 当前页序号
@FdShow nvarchar (4000) = N'', -- 要显示的字段列表,如果查询结果有标识字段,需要指定此值,且不包含标识字段
@FdOrder nvarchar (1000) = N'', -- 排序字段列表
@RecordSum int output -- 记录总数
AS
IF @FdShow IS NULL OR LTRIM(RTRIM(@FdShow)) = ''
BEGIN
SET @FdShow = '*'
END
SET @Where = ISNULL(@Where,'')
SET @Where = LTRIM(RTRIM(@Where))
IF @Where <> ''
BEGIN
IF UPPER(SUBSTRING(@Where,1,5)) <> 'WHERE'
BEGIN
SET @Where = 'WHERE 1 = 1 ' + @Where
END
END
IF @PageSize > 0
BEGIN
SET @FdOrder = NULLIF(LTRIM(RTRIM(@FdOrder)),'')
SET @FdOrder = ISNULL(@FdOrder,'id')
END
SET @FdOrder = LTRIM(RTRIM(@FdOrder))
IF @FdOrder <> ''
BEGIN
IF UPPER(SUBSTRING(@FdOrder,1,8)) <> 'ORDER BY'
BEGIN
SET @FdOrder = 'ORDER BY ' + @FdOrder
END
END
DECLARE @SqlQuery NVARCHAR(MAX)
DECLARE @SqlCount NVARCHAR(MAX)
-- 获取记录总数
set @SqlCount = 'select @RecordSum = count(*) from ' + @Table + ' ' + @Where
exec sp_executesql @SqlCount, N'@RecordSum int output', @RecordSum output
IF @RecordSum = 0
SET @Page = 0
ELSE IF (@RecordSum - 1) / @PageSize + 1 < @Page
SET @Page = (@RecordSum - 1) / @PageSize + 1
IF @PageSize = -1
BEGIN
SET @SqlQuery = '
SELECT ' + @FdShow + '
FROM '+@Table+' '+ @Where
END
ELSE
BEGIN
SET @SqlQuery = '
SELECT ' + @FdShow + ',RowNumber
FROM (
SELECT ' + @FdShow + ',ROW_NUMBER() OVER( '+ @FdOrder +') AS RowNumber
FROM '+@Table+' '+ @Where +') AS RowNumberTableSource
WHERE RowNumber BETWEEN ' + CAST(((@Page - 1) * @PageSize+1) AS VARCHAR) + '
AND ' + CAST((@Page * @PageSize) AS VARCHAR)
END
EXECUTE(@SqlQuery)
RETURN 0
GO
GRANT EXEC ON sp_Pages TO PUBLIC
GO
分享到:
相关推荐
sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程
EXEC sp_executeSQL @STMT, @params = N'@recct INT OUTPUT', @recct = @recct OUTPUT SELECT @recct AS recct -- return the total # of records DECLARE @lbound int, @ubound int SET @pageNum = ABS(@...
通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.
Sql Server BootStrap Table 分页 通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.
sqlserver 分页调用的存储过程 t-sql 语句
PagingOperation数据库SQLServer2008分页存储过程(和java调用存储过程源代码): 调用存储过程进行分页查询速度快,尤其是数据量超过50万条的表非常重要,此代码是我们项目中使用的,实际使用情况稳定,也希望大家...
sql server 2000 分页存储过程,DB2分页存储过程,db2自动生成流水号存储过程
asp+sqlserver2005万能分页存储过程源码 sqlserver2005源码下载,很灵活的
本人整理的sql server2008分页存储过程,很好用的,效率很高
sqlserver+group by分组查询分页存储过程
sql server数据库中分页的存储过程,参数中比较灵活,如果首页传1,非首页传其他。
sql server,分页存储,过程,演示 sql server,分页存储,过程,演示 sql server,分页存储,过程,演示 sql server,分页存储,过程,演示 sql server,分页存储,过程,演示 sql server,分页存储,过程,演示 ...
SqlServer 分页 存储过程
1.查询返回的表、列名以及排序列没有写死,可以根据需要将这些放到存储过程的输入参数中; 2.适用于所有需要分页的单表或多表联合查询。
很好的通过存储过程实现分页的技术,很好的通过存储过程实现分页的技术,很好的通过存储过程实现分页的技术
物有所值的东东 SQL SERVER 分页存储过程 SQL SERVER 分页存储过程 SQL SERVER 分页存储过程
sqlserver 支持多表联合查询分页存储过程 sqlserver 支持多表联合查询分页存储过程 sqlserver 支持多表联合查询分页存储过程 sqlserver 支持多表联合查询分页存储过程
通过几种分页显示存储过程,详细讲解了分页显示存储过程的编写及原理。并了解这几种分页显示存储过程的执行效率。
想在存储过程中分页的朋友可以使用, sqlserver存储过程万能分页