查询的分页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
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