分页存储过程,返回总行数?

yyixin 2010-03-08 01:06:16

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go




ALTER procedure [dbo].[SelectTable]
(@pagesize int,
@pageindex int,
@user varchar(255),
@docount bit,
@rowsum int output
)
as
begin
with temptbl as (
SELECT ROW_NUMBER() OVER (ORDER BY ID desc)AS Row, * FROM TableDn O where username=@user)
SELECT * FROM temptbl where Row between (@pageindex-1)*@pagesize+1 and (@pageindex-1)*@pagesize+@pagesize


-- SELECT @rowsum=COUNT(*) FROM TableDn username=@user
-- 更好的方法
end

...全文
193 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
-狙击手- 2010-03-08
  • 打赏
  • 举报
回复
你要总行数只能count(1)
yyixin 2010-03-08
  • 打赏
  • 举报
回复
引用 13 楼 yyixin 的回复:
自己解决:

SET  @rowsum=@@ROWCOUNT


啊呀!搞错了
-狙击手- 2010-03-08
  • 打赏
  • 举报
回复
引用 13 楼 yyixin 的回复:
自己解决:

SET  @rowsum=@@ROWCOUNT


..
yyixin 2010-03-08
  • 打赏
  • 举报
回复
(1 行受影响)

语句执行花费时间(毫秒)
------------
150

(1 行受影响)

看来要学的东西太多了
yyixin 2010-03-08
  • 打赏
  • 举报
回复
自己解决:

SET @rowsum=@@ROWCOUNT

ChinaJiaBing 2010-03-08
  • 打赏
  • 举报
回复

前台里看看

sqlcommand cmd = new sqlcommand(sql,dbconn)
cmd.ExecuteNonQuery()----返回影响的条数

yyixin 2010-03-08
  • 打赏
  • 举报
回复
引用 7 楼 sql77 的回复:
这个排序列是怎么样的,05的不懂呢,是相同USER的排序还是所有的排序,如果是所有的,可以


是USER排序吧,我就是要取所有符合USER的行数
mxc1225 2010-03-08
  • 打赏
  • 举报
回复
引用 9 楼 yyixin 的回复:
效率还可以的吧 十万条数据:

EXEC @return_value = [dbo].[SelectTable]
@pagesize = 20,
@pageindex = 1,
@user = N'我是中国人',
@rowsum = @rowsum OUTPUT
SELECT @rowsum as N'@rowsum'
SELECT 'Return Value' = @return_value

(1 行受影响)

语句执行花费时间(毫秒)
------------
380

(1 行受影响)

这种效率很好啊!
yyixin 2010-03-08
  • 打赏
  • 举报
回复
效率还可以的吧 十万条数据:

EXEC @return_value = [dbo].[SelectTable]
@pagesize = 20,
@pageindex = 1,
@user = N'我是中国人',
@rowsum = @rowsum OUTPUT
SELECT @rowsum as N'@rowsum'
SELECT 'Return Value' = @return_value

(1 行受影响)

语句执行花费时间(毫秒)
------------
380

(1 行受影响)
东那个升 2010-03-08
  • 打赏
  • 举报
回复
数据大了这个过程效率不高吧。。。。。
SQL77 2010-03-08
  • 打赏
  • 举报
回复
引用 6 楼 yyixin 的回复:
with temptbl as (
SELECT ROW_NUMBER() OVER (ORDER BY ID desc)AS Row, * FROM TableDn O where username=@user)

在这里面得不到吗?比如取最大的行号

这个排序列是怎么样的,05的不懂呢,是相同USER的排序还是所有的排序,如果是所有的,可以
yyixin 2010-03-08
  • 打赏
  • 举报
回复
with temptbl as (
SELECT ROW_NUMBER() OVER (ORDER BY ID desc)AS Row, * FROM TableDn O where username=@user)

在这里面得不到吗?比如取最大的行号
qianshangsheqin 2010-03-08
  • 打赏
  • 举报
回复
SET @rowsum =(SELECT COUNT(*) FROM TableDn where username=@user )
--小F-- 2010-03-08
  • 打赏
  • 举报
回复
这样其实已经够简单了
黄_瓜 2010-03-08
  • 打赏
  • 举报
回复
引用楼主 yyixin 的回复:
SQL codeset ANSI_NULLSONset QUOTED_IDENTIFIERONgoALTERprocedure[dbo].[SelectTable]
(@pagesizeint,@pageindexint,@uservarchar(255),@docountbit,@rowsumint output
)asbeginwith temptblas (SELECT ROW_NUMBE?-

貌似没有,我也想知道。呵呵
SQL77 2010-03-08
  • 打赏
  • 举报
回复
-- SET @rowsum =(SELECT COUNT(*) FROM TableDn username=@user )
-- 更好的方法


这样了还要更好的?
mxc1225 2010-03-08
  • 打赏
  • 举报
回复

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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