通用sql分页存储过程

--------------------------------
--GetPager
--YuanZhiJun
--2013-2-6
--------------------------------
Create PROC dbo.P_GetPager
@Fields nvarchar(4000),
@TableName nvarchar(50),
@Conditions nvarchar(MAX),
@OrderField nvarchar(50),
@OrderType int=1,--1:asc 2:desc
@PageIndex int=1,
@PageSize int=10,
@TotalRecord int OUTPUT
AS
DECLARE @sqlRecord NVARCHAR(max)
DECLARE @sql NVARCHAR(max)
IF(@Conditions IS NOT NULL AND LTRIM(RTRIM(@Conditions))!='')
BEGIN
    SET @Conditions='WHERE '+@Conditions
END
ELSE
BEGIN
    SET @Conditions='WHERE 1=1'
END
SET @sqlRecord='select @a=count(*) from '+@TableName+' '+@Conditions
EXEC sp_executesql @sqlRecord,N'@a int output',@TotalRecord OUTPUT
--PRINT @sqlRecord
--PRINT @TotalRecord

--exec page
DECLARE @sqlOrder NVARCHAR(100)
IF(@OrderType=1)
BEGIN
SET @sqlOrder='order by '+@OrderField+' asc'
END
ELSE
BEGIN
SET @sqlOrder='order by '+@OrderField+' desc'
END


SET @sql='select ROW_NUMBER() OVER('+@sqlOrder+') AS RowNum,'+@Fields+' from '+@TableName+' '+@Conditions
--PRINT @sql
DECLARE @startIndex INT
DECLARE @endIndex INT
IF(@PageIndex=1)
Begin
SET @startIndex=@PageIndex
SET @endIndex=@PageSize
END
ELSE
BEGIN
SET @startIndex=(@PageIndex-1)*@PageSize+1
SET @endIndex=@startIndex+@PageSize
End

SET @Conditions=' Where RowNum BETWEEN '+CAST(@startIndex AS NVARCHAR(10))+' AND '+CAST(@endIndex AS NVARCHAR(10))

SET @sql='select * from ('+@sql+') as a '+@Conditions
PRINT @sql
EXEC(@sql)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值