关于count 的问题

jianshao810 2010-03-19 10:46:18

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <简少辉>
-- Create date: <2010-318>
-- Description: <企业查找用户>
-- =============================================
alter PROCEDURE getPersonSearch
(
@pagesize int,
@pageindex int, --从0开始
@positiontitle int,
@specialty nvarchar(20),
@edustate nvarchar(20),
@language nvarchar(20),
@languageleve nvarchar(20),
@work_year int,
@talent_type nvarchar(20),
@sex nvarchar(10),
@minage int,
@maxage int,
@workplacestr nvarchar(1000),
@locnow nvarchar(20),
@locreg nvarchar(20),
@positionstr nvarchar(1000),
@applytype nvarchar(50),
@up int, --1表示学历包括以上,0不包括
@state int,--简历状态
@count int output
)
AS
BEGIN
SET NOCOUNT ON;
declare @sql nvarchar(4000)
declare @startIndex int
set @startIndex = @pageindex * @pagesize

set @sql='select top '+CONVERT(nvarchar(5), @pagesize,0)+' * from ( select PersonalInfo.Station1,PersonalInfo.Edu,PersonalInfo.UserID,PersonalInfo.Work_Year,PersonalInfo.Update_Time,PublicInfo.Birthday,PublicInfo.Sex as truesex ,ROW_NUMBER() over(order by personalinfo.update_time desc) as row from PersonalInfo inner join PublicInfo on PersonalInfo.UserID = PublicInfo.UserID where 1=1 '

if @positiontitle<>0
begin
if (@positiontitle % 1000)= 0
begin
set @sql = @sql + ' and (PositionTitle1 >= '+CONVERT(nvarchar(10), @positiontitle,0)+' and PositionTitle1<'+CONVERT(nvarchar(10), @positiontitle+1000,0)+') or (PositionTitle2 >= '+CONVERT(nvarchar(10), @positiontitle,0)+' and PositionTitle2<'+CONVERT(nvarchar(10), @positiontitle+1000,0)+')'

end
else
begin
set @sql = @sql + ' and ((PositionTitle1-1)='+CONVERT(nvarchar(10), @positiontitle,0)+' or (PositionTitle2-1)='+CONVERT(nvarchar(10), @positiontitle,0)+')'
end
end

if @specialty<>''
begin
set @sql = @sql + ' and (Specialty1 = '''+@specialty+''' or Specialty2='''+@specialty+''')'
end

if @up>0 --包括以上
begin
set @sql = @sql + ' and (edustate & ' +CONVERT(nvarchar(10),@edustate,0)+')='+CONVERT(nvarchar(10),@edustate,0)+''
end
else
begin
set @sql = @sql +' and (edustate-1)='+CONVERT(nvarchar(10),@edustate,0)+''
end

if @language<>''
begin
if @languageleve<>''
begin
set @sql = @sql +' and ((Language1='''+@language+''' and Level1 = '''+@languageleve+''')'
set @sql = @sql+' or (Language2='''+@language+''' and Level2 = '''+@languageleve+'''))'
end
else
begin
set @sql = @sql +' and ((Language1='''+@language+''')'
set @sql=@sql+' or (Language2='''+@language+'''))'
end
end

if @work_year<>0
begin
set @sql = @sql + ' and Work_Year>='+CONVERT(nvarchar(5), @work_year,0)+''
end

if @talent_type<>''
begin
set @sql= @sql+' and Talent_Type='''+@talent_type+''''
end

if @sex<>'不限'
begin
set @sql = @sql +' and PublicInfo.Sex='''+@sex+''''
end

set @sql = @sql +' and ( YEAR(GETDATE())- PublicInfo.Birthday between '+CONVERT(nvarchar(3),@minage,0)+' and '+CONVERT(nvarchar(3),@maxage,0)+')'

if @locnow <> '不限'
begin
set @sql = @sql + ' and Loc_Now = '''+@locnow+''''
end

if @locreg <> '不限'
begin
set @sql = @sql + ' and Loc_Reg = '''+@locreg+''''
end

if @applytype<>''
begin
set @sql = @sql +' and Apply_Type='''+@applytype+''''
end

if @positionstr<>''
begin
set @sql = @sql + @positionstr
end

if @workplacestr<>''
begin
set @sql = @sql+@workplacestr
end

set @sql = @sql+') as dc where row >= '+CONVERT(nvarchar(5), @startIndex,0)+''

exec sp_executesql @sql

END
GO

select top 10 * from ( select PersonalInfo.Station1,PersonalInfo.Edu,PersonalInfo.UserID,PersonalInfo.Work_Year,PersonalInfo.Update_Time,PublicInfo.Birthday,PublicInfo.Sex as truesex ,ROW_NUMBER() over(order by personalinfo.update_time desc) as row from PersonalInfo inner join PublicInfo on PersonalInfo.UserID = PublicInfo.UserID where 1=1 and (PositionTitle1 >= 1000 and PositionTitle1<2000) or (PositionTitle2 >= 1000 and PositionTitle2<2000) and (Specialty1 = '电子类' or Specialty2='电子类') and (edustate-1)=15 and ((Language1='英语' and Level1 = '四级') or (Language2='英语' and Level2 = '四级')) and Work_Year>=1 and Talent_Type='普通求职' and PublicInfo.Sex='先生' and ( YEAR(GETDATE())- PublicInfo.Birthday between 0 and 100) and Loc_Now = '广东省' and Loc_Reg = '广东省' and Apply_Type='全职兼职均可' and( Position1 like '%程序%' or Position2 like '%程序%' or Position1 like '%tv%' or Position2 like '%tv%') and( Work_Place1 in('广州市','深圳','珠海','中山','汕尾') or Work_Place2 in('广州市','深圳','珠海','中山','汕尾') or Work_Place3 in('广州市','深圳','珠海','中山','汕尾') or Work_Place4 in('广州市','深圳','珠海','中山','汕尾') or Work_Place5 in('广州市','深圳','珠海','中山','汕尾') )) as dc where row >= 0

上面是出来的sql语句
这个存储过程的总行数应该怎样查询出来呢?
...全文
151 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianshao810 2010-03-19
  • 打赏
  • 举报
回复
我觉得我应该将 where 写到程序里面
然后 在存储过程里传入 一个
where参数 比较好
jianshao810 2010-03-19
  • 打赏
  • 举报
回复
是可以。但是有一大串 的 where 条件
我的目的 是想 有没有更简单点的。。
东那个升 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 dawugui 的回复:]
引用 18 楼 jianshao810 的回复:
@@ROWCOUNT
只能得到我想要的 @pagesize
但是 其实我是想要 分页之前 的记录总数
谢谢

select count(1) from tb
[/Quote]
直接查询表不就得了。
jianshao810 2010-03-19
  • 打赏
  • 举报
回复
谢谢。。。
chuifengde 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 jianshao810 的回复:]
@@ROWCOUNT
只能得到我想要的 @pagesize
但是 其实我是想要 分页之前 的记录总数
谢谢
[/Quote]
如果要在本存储过程中实现,那就得重查一次,如果对总数的准确量要求不高,可以查sysindexes中的rows值
dawugui 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 jianshao810 的回复:]
@@ROWCOUNT
只能得到我想要的 @pagesize
但是 其实我是想要 分页之前 的记录总数
谢谢
[/Quote]
select count(1) from tb
jianshao810 2010-03-19
  • 打赏
  • 举报
回复
@@ROWCOUNT
只能得到我想要的 @pagesize
但是 其实我是想要 分页之前 的记录总数
谢谢
永生天地 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jianshao810 的回复:]
select top 10 * from

select count(*) from

我两个都要。
难道只能重新查询一次吗?
[/Quote]
up
永生天地 2010-03-19
  • 打赏
  • 举报
回复
@@ROWCOUNT
返回受上一语句影响的行数。

语法
@@ROWCOUNT

返回类型
integer

注释
任何不返回行的语句将这一变量设置为 0 ,如 IF 语句。

示例
下面的示例执行 UPDATE 语句并用 @@ROWCOUNT 来检测是否有发生更改的行。

UPDATE authors SET au_lname = 'Jones'
WHERE au_id = '999-888-7777'
IF @@ROWCOUNT = 0
print 'Warning: No rows were updated'

jianshao810 2010-03-19
  • 打赏
  • 举报
回复
引用 8 楼 jianshao810 的回复:
哦。。不好意思啊。。
就是结果的 总数。

select @@rowcount


这个只能拿到 10,
但是结果里应该是有几w的
我想将几w弄出来
dawugui 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jianshao810 的回复:]
哦。。不好意思啊。。
就是结果的 总数。
[/Quote]select @@rowcount
jianshao810 2010-03-19
  • 打赏
  • 举报
回复

select top 10 * from

select count(*) from

我两个都要。
难道只能重新查询一次吗?
jianshao810 2010-03-19
  • 打赏
  • 举报
回复
另外我这个是在页面显示的。
代码行数也能查出来?不是吧
ws_hgo 2010-03-19
  • 打赏
  • 举报
回复
好长啊
永生天地 2010-03-19
  • 打赏
  • 举报
回复
select top 10 * from

select count(*) from
jianshao810 2010-03-19
  • 打赏
  • 举报
回复
@@rowcount
这个只能查出 @pagesize 出来啊。。
我想得到的是 没分页之前 记录 的总数
jianshao810 2010-03-19
  • 打赏
  • 举报
回复
哦。。不好意思啊。。
就是结果的 总数。
东那个升 2010-03-19
  • 打赏
  • 举报
回复
应该是最后查询影响的行数
东那个升 2010-03-19
  • 打赏
  • 举报
回复
@@rowcount
--小F-- 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chuifengde 的回复:]
SQL code
...
set @sql = @sql+') as dc where row >= '+CONVERT(nvarchar(5), @startIndex,0)+''

exec sp_executesql @sql
set @count=@@rowcount--加这个
[/Quote]
是这个意思么??
加载更多回复(4)

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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