查询的分页sql代码

查询分页代码
USE   [ WebE ]
GO
/* ***** 对象:  StoredProcedure [dbo].[P_TablePaginationSearch]    脚本日期: 07/29/2010 20:36:21 ***** */
SET  ANSI_NULLS  ON
GO
SET  QUOTED_IDENTIFIER  ON
GO

CREATE   procedure   [ dbo ] . [ P_TablePaginationSearch ]
(
@SelectField   nvarchar ( 512 ) = ' * '       --  Select语句字段,调用的时候不要输入"select" 
, @FormTables   nvarchar ( 512 )       --  Form子句,表名,包括架构名,调用的时候不要输入"from" 
, @WhereField   nvarchar ( 512 ) = null       --  Where语句、判断字段,调用的时候不要输入"where" 
--
---------------------------------------------------
, @OverPartitionField   nvarchar ( 512 ) = null     --  分区字段,
, @OverOrderField   nvarchar ( 512 )      --  分页字段,主要排序字段,必须
, @GroupField   nvarchar ( 512 ) = null       --  分组字段
, @HavingField   nvarchar ( 512 ) = null      --  分组判断条件
, @OrderField   nvarchar ( 512 ) = null       --  排序字段 
--
---------------------------------------------------
, @PageSize   int = 10          --  页长
, @Page   int = 1           --  页
--
---------------------------------------------------
, @NewTempTable   varchar ( 100 ) = ''   -- 新建临时表
--
----------------------------
, @ErrorProcedure   nvarchar ( 128 ) = null  output  --  错误存储过程名
, @ErrorNumber   int = 0  output       --  错误编号
, @ErrorMessage   nvarchar ( 512 ) = null  output  --  错误信息
)
as
begin

-- 定义第一行记录
declare   @firstRow   int ;
-- 定义最后一条记录
declare   @lastRow   int ; -- 设置第一条记录
set   @firstRow = (( @Page - 1 ) * @PageSize ) + 1 ;
-- 设置最后一条记录
set   @lastRow = @firstRow + @PageSize ; -- 定义查询SQL字段
declare   @sqlString   nvarchar ( 512 );
-- 定义Select语句,内查询使用
declare   @selectString   nvarchar ( 512 );
-- 定义Where字段,内查询使用
declare   @whereString   nvarchar ( 512 );
-- 定义Form子句,内查询使用
declare   @formString   nvarchar ( 512 );
-- 定义分组字段,内查询使用
declare   @groupString   nvarchar ( 512 );
-- 定义Having子句,内查询使用
declare   @havingString   nvarchar ( 512 );
-- 定义排序字段,外查询使用
declare   @OrderString   nvarchar ( 512 );

declare   @select_Table   as   nvarchar ( 200 ); -- 新建表

if   @NewTempTable = ''   -- 只是输出
     set   @select_Table = ' select *  '
else      -- 新建临时表
     set   @select_Table = ' select * into   ' +   @NewTempTable + '   '


-- 组装Select子句-----------------------------------
set   @SelectField = isnull ( @SelectField ,N '  *  ' );
if ( @SelectField = '' )
   
set   @SelectField = N '  * '  ;
-- 组装select子句到row_number()
set   @selectString = N '  select  ' +   @SelectField +   ' , Row_Number() over(  ' ;
-- 组装到分区partition by 表达式
set   @OverPartitionField = isnull ( @OverPartitionField ,N '' );
if  ( @OverPartitionField <> '' )
   
set   @selectString =   @selectString +   '  partition by  ' +   @OverPartitionField ;
-- 组装到排序分页order by 表达式
set   @OverOrderField = isnull ( @OverOrderField ,N '' );
if  ( @OverOrderField <> '' )
   
set   @selectString =   @selectString +   '  order by  ' +   @OverOrderField +  N ' ) as RowNumber  ' ;
-- over---------------------------------------------

-- 组装Form子句------------------------------------
set   @formString =  N '  from  ' +   @FormTables ;

-- 组装Where判断子句------------------------------
set   @WhereField = isnull ( @WhereField ,N '' );
if ( @WhereField <> '' )
   
set   @whereString = N '  where  ' +   @WhereField ;
else
   
set   @whereString = N '' ;
-- where判断子句组装完毕-------------------------

-- 组装group by分组子句--------------------------
set   @GroupField = isnull ( @GroupField ,N '' );
if  ( @GroupField <> '' )
begin
   
set   @groupString =  N '  group by  ' +   @GroupField ;    -- 组装having分组判断条件
    set   @HavingField =   isnull ( @HavingField ,N '' );
   
if  ( @HavingField <>  N '' )
    
set   @havingString =  N '  having  ' +   @HavingField ;
   
else
    
set   @havingString = N '' ;
end
else
begin
   
set   @groupString =  N '' ;
   
set   @havingString = N '' ;
end
-- over-------------------------------------------

-- 组装order by外排序子句-----------------------
set   @OrderField = isnull ( @OrderField ,N '' );
if  ( @OrderField <> '' )
   
set   @OrderString =  N '  order by  ' +   @OverOrderField +  N '  ,  ' +   @OrderField ;
else
   
set   @OrderString =  N '' ;
-- 如果@groupString不为空,则外排序不起作用
if  ( @groupString <> N '' )
   
set   @OrderString = N '' ;
-- over-------------------------------------------

-- 组装分页查询语句
set   @sqlString =
--    N'select * '+
     @select_Table   +
   N
' from  ' +
   N
'  (  ' +
    
@selectString +
    
@formString +
    
@whereString +
    
@groupString +
    
@havingString +
   N
'  ) as TB  ' +
   N
' where  ' +
   N
'  TB.RowNumber>= ' + cast ( @firstRow   as   nvarchar ( 10 )) +
   N
'  and TB.RowNumber< ' + cast ( @lastRow   as   nvarchar ( 10 )) +
   
@orderString
-- over-------------------------------------------

-- 执行SQL,返回影响行数;如有异常,则抛出,并赋值输出参数
begin  try
    
print   ' @sqlString =  ' + @sqlString ;
   
exec  ( @sqlString );
   
return   @@rowcount ;
end  try
begin  catch
   
set   @ErrorProcedure = Error_Procedure();
   
set   @ErrorNumber = error_number();
   
set   @ErrorMessage = error_message();
end  catch; end


你可能感兴趣的:(sql代码)