SQL存储过程分页排序


create procedure [dbo].[CommonDataPager]
(
	--用途:分页查询记录信息
	--以下是几个参数的说明:
	--1.@tbName:表示表名
	--2.@PrimaryKey:表的主键
	--3.@searchCount:返回的结果数
	--4.@fldNames:字段名,多个字段以逗号分割
	--5.@PageSize:每页显示的记录数,如果为0,则表示不要分页,直接得到搜索、排序后的所有记录
	--6.@PageIndex:当前页的索引
	--7.@Filter:搜索条件,即在“where”后面写条件
	--8.@Sort:排序项,即在“order by”后面写排序项
	--9.@joinTable:连接其他表
	@tbName varchar(3000),
	@PrimaryKey varchar (255),
	@searchCount int output,
	@fldNames varchar(3000)='*',
	@PageSize int= 0,
	@PageIndex int= 1,
	@Filter nvarChar (3000)='',
	@Sort varchar (3000)='',
	@joinTable nvarchar(3000)=''			--调用的时候,可以类似如:as a inner join departInfo as b on a.departInfoId=b.Id
)
as
declare @start   nvarchar (100)
declare @end   nvarchar (100)
declare @m_WhereString varchar(4000)
declare @sqlString nvarchar(4000)			--动态拼接的SQL语句
declare @orderString   nvarchar (4000)
 
if(@PageSize < 0)
begin
	set @PageSize=0;
end
if(@PageIndex < 1)
begin
	set @PageIndex=1;
end
set @start = ltrim(rtrim(Cast((@PageSize*(@PageIndex - 1)+1) as varchar (100))))		--开始记录
set @end =ltrim(rtrim(Cast((@PageSize * @PageIndex) as varchar (100))))				--结束记录
set @m_WhereString=''
if(len(ltrim(rtrim(@Filter))) > 0)
begin
	set @m_WhereString   = ' where ' + @Filter;
end
 
if (len (ltrim (rtrim (@Sort))) > 0)
begin
	set @orderString   = ' order by ' + @Sort;
end
else
begin
	set @orderString   = ' order by ' + @PrimaryKey + ' asc '
end
declare @sqlStringOutput nvarchar(3000)
set @sqlStringOutput=N'select @searchCount=count(*) from ' + @tbName + ' ' + @joinTable + ' ' + @m_WhereString;
exec sp_executesql @sqlStringOutput,N'@searchCount int output',@searchCount output
if (@PageSize = 0)
begin
	--得到所有的搜索记录,并且不分页
	set @sqlString='select ' + @fldNames + ' from  ' + @tbName + @m_WhereString + ' ' + @orderString;
end
else
begin
	--实现分页效果,并且根据搜索条件过滤、分页、排序
	set @sqlString='select * from (select row_number() over('+ @orderString +') as myNewId,' + @fldNames + ' from ' + @tbName + ' ' + @joinTable + ' ' + @m_WhereString + ' ) as MyTempTable where myNewId between '+ @start +' and '+ @end +' order by myNewId asc' ;                                                              
end
exec(@sqlString)
go
 
 
/*
--测试调用存储过程
declare @count int
set @count=0
exec [CommonDataPager] 'UserInfo','Id',@count output,'userName,userAge',15,1,'userName like ''[^n]%'' ','userName desc',''
print @count
*/

代码如下:

 

  1.   create procedure [dbo].[CommonDataPager]
  2.   (
  3.   --用途:分页查询记录信息
  4.   --以下是几个参数的说明:
  5.   --1.@tbName:表示表名
  6.   --2.@PrimaryKey:表的主键
  7.   --3.@searchCount:返回的结果数
  8.   --4.@fldNames:字段名,多个字段以逗号分割
  9.   --5.@PageSize:每页显示的记录数,如果为0,则表示不要分页,直接得到搜索、排序后的所有记录
  10.   --6.@PageIndex:当前页的索引
  11.   --7.@Filter:搜索条件,即在“where”后面写条件
  12.   --8.@Sort:排序项,即在“order by”后面写排序项
  13.   --9.@joinTable:连接其他表
  14.   @tbName varchar(3000),
  15.   @PrimaryKey varchar (255),
  16.   @searchCount int output,
  17.   @fldNames varchar(3000)='*',
  18.   @PageSize int= 0,
  19.   @PageIndex int= 1,
  20.   @Filter nvarChar (3000)='',
  21.   @Sort varchar (3000)='',
  22.   @joinTable nvarchar(3000)='' --调用的时候,可以类似如:as a inner join departInfo as b on a.departInfoId=b.Id
  23.   )
  24.   as
  25.   declare @start nvarchar (100)
  26.   declare @end nvarchar (100)
  27.   declare @m_WhereString varchar(4000)
  28.   declare @sqlString nvarchar(4000) --动态拼接的SQL语句
  29.   declare @orderString nvarchar (4000)
  30.    
  31.   if(@PageSize < 0)
  32.   begin
  33.   set @PageSize=0;
  34.   end
  35.   if(@PageIndex < 1)
  36.   begin
  37.   set @PageIndex=1;
  38.   end
  39.   set @start = ltrim(rtrim(Cast((@PageSize*(@PageIndex - 1)+1) as varchar (100)))) --开始记录
  40.   set @end =ltrim(rtrim(Cast((@PageSize * @PageIndex) as varchar (100)))) --结束记录
  41.   set @m_WhereString=''
  42.   if(len(ltrim(rtrim(@Filter))) > 0)
  43.   begin
  44.   set @m_WhereString = ' where ' + @Filter;
  45.   end
  46.    
  47.   if (len (ltrim (rtrim (@Sort))) > 0)
  48.   begin
  49.   set @orderString = ' order by ' + @Sort;
  50.   end
  51.   else
  52.   begin
  53.   set @orderString = ' order by ' + @PrimaryKey + ' asc '
  54.   end
  55.   declare @sqlStringOutput nvarchar(3000)
  56.   set @sqlStringOutput=N'select @searchCount=count(*) from ' + @tbName + ' ' + @joinTable + ' ' + @m_WhereString;
  57.   exec sp_executesql @sqlStringOutput,N'@searchCount int output',@searchCount output
  58.   if (@PageSize = 0)
  59.   begin
  60.   --得到所有的搜索记录,并且不分页
  61.   set @sqlString='select ' + @fldNames + ' from ' + @tbName + @m_WhereString + ' ' + @orderString;
  62.   end
  63.   else
  64.   begin
  65.   --实现分页效果,并且根据搜索条件过滤、分页、排序
  66.   set @sqlString='select * from (select row_number() over('+ @orderString +') as myNewId,' + @fldNames + ' from ' + @tbName + ' ' + @joinTable + ' ' + @m_WhereString + ' ) as MyTempTable where myNewId between '+ @start +' and '+ @end +' order by myNewId asc' ;
  67.   end
  68.   exec(@sqlString)
  69.   go
  70.    
  71.    
  72.    

 

新:

 

  1.   create procedure [dbo].[CommonDataPager]
  2.   (
  3.   --用途:分页查询记录信息
  4.   --以下是几个参数的说明:
  5.   --1.@tbName:表示表名
  6.   --2.@PrimaryKey:表的主键
  7.   --3.@searchCount:返回的结果数
  8.   --4.@fldNames:字段名,多个字段以逗号分割
  9.   --5.@PageSize:每页显示的记录数,如果为0,则表示不要分页,直接得到搜索、排序后的所有记录
  10.   --6.@PageIndex:当前页的索引
  11.   --7.@Filter:搜索条件,即在“where”后面写条件
  12.   --8.@Sort:排序项,即在“order by”后面写排序项
  13.   --9.@joinTable:连接其他表
  14.   @tbName varchar(3000),
  15.   @PrimaryKey varchar (255),
  16.   @searchCount int output,
  17.   @fldNames varchar(3000)='*',
  18.   @PageSize int= 0,
  19.   @PageIndex int= 1,
  20.   @Filter nvarChar (3000)='',
  21.   @Sort varchar (3000)='',
  22.   @joinTable nvarchar(3000)='' --调用的时候,可以类似如:as a inner join departInfo as b on a.departInfoId=b.Id
  23.   )
  24.   as
  25.   declare @start nvarchar (100)
  26.   declare @end nvarchar (100)
  27.   declare @m_WhereString varchar(4000)
  28.   declare @sqlString nvarchar(4000) --动态拼接的SQL语句
  29.   declare @orderString nvarchar (4000)
  30.    
  31.   if(@PageSize < 0)
  32.   begin
  33.   set @PageSize=0;
  34.   end
  35.   if(@PageIndex < 1)
  36.   begin
  37.   set @PageIndex=1;
  38.   end
  39.   set @start = ltrim(rtrim(Cast((@PageSize*(@PageIndex - 1)+1) as varchar (100)))) --开始记录
  40.   set @end =ltrim(rtrim(Cast((@PageSize * @PageIndex) as varchar (100)))) --结束记录
  41.   set @m_WhereString=''
  42.   if(len(ltrim(rtrim(@Filter))) > 0)
  43.   begin
  44.   set @m_WhereString = ' where ' + @Filter;
  45.   end
  46.    
  47.   if (len (ltrim (rtrim (@Sort))) > 0)
  48.   begin
  49.   set @orderString = ' order by ' + @Sort;
  50.   end
  51.   else
  52.   begin
  53.   set @orderString = ' order by ' + @PrimaryKey + ' asc '
  54.   end
  55.   declare @sqlStringOutput nvarchar(3000)
  56.   set @sqlStringOutput=N'select @searchCount=count(*) from ' + @tbName + ' ' + @joinTable + ' ' + @m_WhereString;
  57.   exec sp_executesql @sqlStringOutput,N'@searchCount int output',@searchCount output
  58.   if (@PageSize = 0)
  59.   begin
  60.   --得到所有的搜索记录,并且不分页
  61.   set @sqlString='select ' + @fldNames + ' from ' + @tbName + @m_WhereString + ' ' + @orderString;
  62.   end
  63.   else
  64.   begin
  65.   --实现分页效果,并且根据搜索条件过滤、分页、排序
  66.   set @sqlString='select * from (select row_number() over('+ @orderString +') as myNewId,' + @fldNames + ' from ' + @tbName + ' ' + @joinTable + ' ' + @m_WhereString + ' ) as MyTempTable where myNewId between '+ @start +' and '+ @end +' order by myNewId asc' ;
  67.   end
  68.   exec(@sqlString)
  69.   go
  70.    
  71.    
  72.   /*
  73.   --测试调用存储过程
  74.   declare @count int
  75.   set @count=0
  76.   exec [CommonDataPager] 'UserInfo','Id',@count output,'userName,userAge',15,1,'userName like ''[^n]%'' ','userName desc',''
  77.   print @count
  78.   */

 

等待更新...

转载于:https://www.cnblogs.com/Music/archive/2010/08/14/SPCommonDataPager.html

  相关资源:sqlserver存储过程分页(按多条件排序)_sqlserver多字段排序,sqls...