CREATE procedure [dbo].[sp_CommonPager]
(
--1,参数的括号可要可不要,有默认值的参数, 在调用的时候,可以不写出来
--2,调用:
--declare @i int
--exec sp_CommonPager 'list','id,title','id',3,4,1,'classid=6',@i out
@tblName varchar(100), -- 表名
@fldCow varchar(300)='*', -- 要查询的列
@fldName varchar(255), -- 排序列
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@OrderType int = 1, -- 设置排序类型, 1则降序
@strWhere varchar(200) = '', -- 查询条件 (注意: 不要加 where)
@count varchar(10) output --输出符合条件的记录的总数
)
ASdeclare @strSQL varchar(1000); -- 主语句
declare @strOrder varchar(500) ; -- 排序类型
declare @strTmp varchar(100) ; --临时变量
declare @endIndex int; -- 结束的索引
declare @startIndex int; -- 开始的索引
declare @countSql nvarchar(500); --查询记录总数的SQL-- 得到索引
set @startIndex=(@PageIndex-1)*@PageSize + 1;--注意,这里要加1
set @endIndex=@PageIndex*@PageSize;--生成排序语句
--为了多表联合查询,这里要把表名字和排序字段的[]去掉-
if @OrderType != 0
set @strOrder = ' order by ' + @fldName + ' desc'
else
set @strOrder = ' order by ' + @fldName + ' asc'
set @strSQL = '(select top ' + ltrim(str(@endIndex)) +' '+@fldCow+','
+ 'row_number() over ('+ @strOrder +') as rownumber from '
+ @tblName + '' ;set @countSql= 'select @count=count('+@fldName+') from '+ @tblName ;
if @strWhere! = ''
begin
set @strSQL =@strSQL+ ' where ('+ @strWhere + ') ';
set @countSql=@countSql + ' where ('+ @strWhere + ') ';
end
set @strSQL =@strSQL+ ') as tblTmp'--得到记录总数
set @countSql=N'select @count=count(*) from ' + @tblName;
if @strWhere! = ''
set @countSql=@countSql+ N' where ' + @strWhere;
EXEC sp_executesql @countSql,N'@count varchar(20) out',@count outset @strSQL = 'select * from ' + @strSQL + ' where rownumber between ' + ltrim(str(@startIndex)) + ' and '
+ ltrim(str(@endIndex));
--执行主语句
set nocount on -- 防止显示有关受影响的行数的信息
exec (@strSQL)--print @strSQL
--@tblName varchar(100), -- 表名
--@fldCow varchar(300)='*', -- 要查询的列
--@fldName varchar(255), -- 排序列
--@PageSize int = 10, -- 页尺寸
--@PageIndex int = 1, -- 页码
--@OrderType int = 1, -- 设置排序类型, 1则降序
--@strWhere varchar(200) = '', -- 查询条件 (注意: 不要加 where)
--@count varchar(10) output --输出符合条件的记录的总数
这是调用这个存储过程用的:
EXEC sp_CommonPager 'mst_models', '*', 'wps', 10, 1, 1, '', ''
我要知道,如果,我要这样调:
EXEC sp_CommonPager 'mst_models', '*', 'wps', 9999, 1, 0, sql, @count
sql是我传入的查询条件,但@count这个参数怎么用,怎样得到这个条件下的所有记录数?
(
--1,参数的括号可要可不要,有默认值的参数, 在调用的时候,可以不写出来
--2,调用:
--declare @i int
--exec sp_CommonPager 'list','id,title','id',3,4,1,'classid=6',@i out
@tblName varchar(100), -- 表名
@fldCow varchar(300)='*', -- 要查询的列
@fldName varchar(255), -- 排序列
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@OrderType int = 1, -- 设置排序类型, 1则降序
@strWhere varchar(200) = '', -- 查询条件 (注意: 不要加 where)
@count varchar(10) output --输出符合条件的记录的总数
)
ASdeclare @strSQL varchar(1000); -- 主语句
declare @strOrder varchar(500) ; -- 排序类型
declare @strTmp varchar(100) ; --临时变量
declare @endIndex int; -- 结束的索引
declare @startIndex int; -- 开始的索引
declare @countSql nvarchar(500); --查询记录总数的SQL-- 得到索引
set @startIndex=(@PageIndex-1)*@PageSize + 1;--注意,这里要加1
set @endIndex=@PageIndex*@PageSize;--生成排序语句
--为了多表联合查询,这里要把表名字和排序字段的[]去掉-
if @OrderType != 0
set @strOrder = ' order by ' + @fldName + ' desc'
else
set @strOrder = ' order by ' + @fldName + ' asc'
set @strSQL = '(select top ' + ltrim(str(@endIndex)) +' '+@fldCow+','
+ 'row_number() over ('+ @strOrder +') as rownumber from '
+ @tblName + '' ;set @countSql= 'select @count=count('+@fldName+') from '+ @tblName ;
if @strWhere! = ''
begin
set @strSQL =@strSQL+ ' where ('+ @strWhere + ') ';
set @countSql=@countSql + ' where ('+ @strWhere + ') ';
end
set @strSQL =@strSQL+ ') as tblTmp'--得到记录总数
set @countSql=N'select @count=count(*) from ' + @tblName;
if @strWhere! = ''
set @countSql=@countSql+ N' where ' + @strWhere;
EXEC sp_executesql @countSql,N'@count varchar(20) out',@count outset @strSQL = 'select * from ' + @strSQL + ' where rownumber between ' + ltrim(str(@startIndex)) + ' and '
+ ltrim(str(@endIndex));
--执行主语句
set nocount on -- 防止显示有关受影响的行数的信息
exec (@strSQL)--print @strSQL
--@tblName varchar(100), -- 表名
--@fldCow varchar(300)='*', -- 要查询的列
--@fldName varchar(255), -- 排序列
--@PageSize int = 10, -- 页尺寸
--@PageIndex int = 1, -- 页码
--@OrderType int = 1, -- 设置排序类型, 1则降序
--@strWhere varchar(200) = '', -- 查询条件 (注意: 不要加 where)
--@count varchar(10) output --输出符合条件的记录的总数
这是调用这个存储过程用的:
EXEC sp_CommonPager 'mst_models', '*', 'wps', 10, 1, 1, '', ''
我要知道,如果,我要这样调:
EXEC sp_CommonPager 'mst_models', '*', 'wps', 9999, 1, 0, sql, @count
sql是我传入的查询条件,但@count这个参数怎么用,怎样得到这个条件下的所有记录数?
http://blog.csdn.net/xys_777/archive/2010/06/21/5684442.aspx