今天在公司的项目中发现了个一个比较通用的存储过程,就此共享
CREATE PROCEDURE [dbo].[CustomPaging]
@getFields NVARCHAR(500)='', --返回字段
@tblName NVARCHAR(255)='', --表名
@strWhere NVARCHAR(1500)='', --查询条件
@strOrder NVARCHAR(1000)='',--排序字段
@PageSize INT=10, --页尺寸
@CurrentPage INT=1 --当前页码
AS
DECLARE @strSQL NVARCHAR(4000) --主语句
DEClARE @strTmp NVARCHAR(2000) --临时变量
DECLARE @sRowNum INT --始记录行
DEClARE @eRowNum INT --未记录行
DECLARE @strCount NVARCHAR(4000) --查总的记录数
DECLARE @Recordstr nvarchar(50)--记录条数
DECLARE @RecordCount int
DECLARE @CountPage int--总页数
--设置查找
IF @strWhere != ''
SET @strWhere = ' WHERE ' + @strWhere
--输出总记录
SET @strSQL='set @RecordCount=(select count(*) from ' + @tblName + @strWhere+')'
EXEC sp_executesql @strSQL,N'@RecordCount int output',@RecordCount output
SET @Recordstr= @RecordCount
--取总页数
IF @Recordstr%@PageSize=0 and @Recordstr>0
SET @CountPage=@Recordstr/@PageSize
ELSE
SET @CountPage=@Recordstr/@PageSize+1
--判断当前页是否超出范围
IF @CountPage<@CurrentPage
SET @CurrentPage=@CountPage --取当前页
--设置页起始记录行值
SET @sRowNum=(@CurrentPage-1)*@PageSize+1
--设置页未记录行值
SET @eRowNum=@sRowNum+@PageSize-1
--设置排序
IF (@strOrder !='')
SET @strOrder = ' ORDER BY '+@strOrder
ELSE
SET @strOrder = ' ORDER BY ID'
--设置总记录数
SET @strCount = 'SELECT '+@Recordstr+' AS Total '
--设置总临时表
SET @strTmp = '(SELECT ROW_NUMBER() OVER( '+@strOrder+' ) AS RowNum,'+ @getFields +
' FROM '+@tblName+ @strWhere +') AS t'
--设置分页表
--IF (@CurrentPage = 1)
--SET @strSQL = 'SELECT TOP ('+ltrim(str(@PageSize))+') ROW_NUMBER() OVER('+@strOrder+' ) AS RowNum,'+@getFields+
-- ' FROM '+ @tblName + @strWhere + @strOrder
--SET @strSQL = 'SELECT TOP ('+ltrim(str(@PageSize))+') * from '+@strTmp
--ELSE
SET @strSQL = 'SELECT TOP ('+ltrim(str(@PageSize))+') * FROM '+ @strTmp +
' WHERE RowNum BETWEEN '+ltrim(str(@sRowNum))+' AND '+ltrim(str(@eRowNum))+' order by rownum asc'
--取得列表
EXEC (@strSQL)
--取得总记录数
EXEC (@strCount)
RETURN
此处有个函数挺有用得 就是产生序号 row_number over(order by yourfiled)
有表USERINFO 有column name varchar(20)
可以如此 select row_number over(order by name) as ‘序号’,* from userInfo
显示:
序号 name
1 zhang
2 wang
3 lidddd