请问这个分页存储过程怎么写,

happyxzxin 2008-09-07 01:24:28


alter PROCEDURE [dbo].[GetsearchPage]
@nPage int,---第几页
@Pnum int,--每页页数
@key nvarchar(100),
@f_allidnum nvarchar(100) output --返回总页数
AS
declare @sql nvarchar(3000),@c nvarchar(20)


set @sql='WITH OrderedOrders AS
(SELECT count(id),soft_names,addtime,softsize,soft_garde,system_set,downcount,
ROW_NUMBER() OVER (order by [id])as RowNumber FROM soft where soft_names like ''%'+@key+'%'''+' )
SELECT id,soft_names,addtime,softsize,soft_garde ,system_set,downcount
FROM OrderedOrders
WHERE RowNumber>'+cast((@nPage-1)*@Pnum as nvarchar(50))+' and RowNumber<='+cast(@nPage*@Pnum as nvarchar(50))


set @sql=@sql+' order by addtime desc'

set @sql=@sql+' select '+cast(@f_allidnum as nvarchar(20))+'=count(*) from OrderedOrders '
exec(@sql)





@f_allidnum总是null
...全文
64 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
编程有钱人了 2008-09-07
  • 打赏
  • 举报
回复
up
kevinhu520 2008-09-07
  • 打赏
  • 举报
回复
CREATE PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@RetColumns varchar(1000) = '*', -- 需要返回的列,默认为全部
@Orderfld varchar(255), -- 排序字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType varchar(50) = 'asc', -- 设置排序类型, 非 asc 值则降序
@strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL varchar(1000) -- 主语句
declare @strTmp varchar(300) -- 临时变量
declare @strOrder varchar(400) -- 排序类型

if @IsCount != 0 --执行总数统计

begin
if @strWhere != ''
set @strSQL = "select count(*) as Total from [" + @tblName + "] where " + @strWhere
else
set @strSQL = "select count(*) as Total from [" + @tblName + "]"
end

else --执行查询操作

begin

if @OrderType != 'asc'
begin
set @strTmp = "<(select min"
set @strOrder = " order by [" + @Orderfld +"] desc"
end
else
begin
set @strTmp = ">(select max"
set @strOrder = " order by [" + @Orderfld +"] asc"
end

set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "] where [" + @Orderfld + "]" + @strTmp + "(["
+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @Orderfld + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
+ @strOrder

if @strWhere != ''
set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "] where [" + @Orderfld + "]" + @strTmp + "(["
+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @Orderfld + "] from [" + @tblName + "] where (" + @strWhere + ") "
+ @strOrder + ") as tblTmp) and (" + @strWhere + ") " + @strOrder

if @PageIndex = 1
begin
set @strTmp = ""
if @strWhere != ''
set @strTmp = " where (" + @strWhere + ")"

set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["
+ @tblName + "]" + @strTmp + " " + @strOrder
end
end

exec (@strSQL)
happyxzxin 2008-09-07
  • 打赏
  • 举报
回复
还是不行,还是null
moeryang 2008-09-07
  • 打赏
  • 举报
回复
@f_allidnum 如果作为一个输出参数的话应该直接执行sql语句
moeryang 2008-09-07
  • 打赏
  • 举报
回复
exec(@sql)
select @f_allidnum =count(*) from OrderedOrders;
happyxzxin 2008-09-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lxy_lxy 的回复:]
分页存储过程··网上有好多··干嘛自己写···
[/Quote]就差怎么返回总页数了
lxy_lxy 2008-09-07
  • 打赏
  • 举报
回复
分页存储过程··网上有好多··干嘛自己写···

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧