首页 新闻 会员 周边 捐助

一个分页SQL存储过程的问题!!!

0
悬赏园豆:20 [已解决问题] 解决于 2009-11-18 13:52

写了个分页的存储过程,其中定义了个输出参数@Count,为了将总页数通过计算带出来,但是这里总是返回空值,不知道哪里出的问题,高手们看看哦!!!

 

Code
问题补充: alter proc UserInfos_SelectAllPaged @pageCount int, --每页显示的条数 @pageNow int, --当前页数 @tableName varchar(50), --表名 @primaryName varchar(50), --表主键的名字 @Count int output --返回总记录数 as declare @sql varchar(2000) declare @countTemp int set @countTemp=( select count(*) from @tableName) set @Count =@countTemp set @sql = 'select top ' + cast(@pageCount as varchar) + ' * from ' + @tableName+ ' where ' + @primaryName + ' not in (select top ' + cast(@pageCount*(@pageNow-1) as varchar) + ' ' + @primaryName + ' from '+ @tableName+')' exec(@sql) 经过改进,改成这个样子,但是set @countTemp=( select count(*) from @tableName) 这一句里的@tableName总是报错说必须定义变量@tableName,什么问题?
死神的背影的主页 死神的背影 | 小虾三级 | 园豆:667
提问于:2009-11-18 09:21
< >
分享
最佳答案
0

就你这个存储过程里面问题太多了,

declare @countTemp int
set @sqlcount = 'select ' + cast(@countTemp as varchar)+'=count(*) from @tableName'
@tableName
不应该放在字符串里面,
@countTemp没有初始化,使用方法也不对。这样你最后的字符串就是select null=count(*) from table返回的肯定就是null了。
其他还有很多问题,就不一一列举了。

网上有很多,建议你还是网上找找吧。

收获园豆:20
清海扬波 | 小虾三级 |园豆:825 | 2009-11-18 09:56
这个··· 能说下具体要怎么改吗,这里不是很了解
死神的背影 | 园豆:667 (小虾三级) | 2009-11-18 10:12
create proc UserInfos_SelectAllPaged ( @pageCount int, --每页显示的条数 @pageNow int, --当前页数 @tableName varchar(50), --表名 @primaryName varchar(50), --表主键的名字 @Count int output --返回总页数 )as declare @sql nvarchar(2000) declare @sqlcount varchar(500) declare @countTemp int set @sql = 'select top ' + cast(@pageCount as varchar) + ' * from ' + @tableName + ' where ' + @primaryName + ' not in (select top ' + cast(@pageCount*(@pageNow-1) as varchar) + ' ' + @primaryName + ' from '+ @tableName+')' exec(@sql) SET @sql=N'SELECT @CountTemp=COUNT(*)' +N' FROM '+@tableName EXEC sp_executesql @sql,N'@CountTemp int OUTPUT',@CountTemp OUTPUT set @Count = @CountTemp/ @pageCount + 1 这是在你的基础上面修改的。
清海扬波 | 园豆:825 (小虾三级) | 2009-11-18 11:46
@清海扬波:非常感谢,用你的方法已经解决问题了,不过还是麻烦请教一下 EXEC sp_executesql @sql,N'@CountTemp int OUTPUT',@CountTemp OUTPUT 这句话的作用是什么,能解释一下吗?
死神的背影 | 园豆:667 (小虾三级) | 2009-11-18 13:52
@死神的背影: 查看sql server帮助,比我解释得更清楚。
清海扬波 | 园豆:825 (小虾三级) | 2009-11-18 15:31
其他回答(3)
0

1.不用OUTPut 直接用 Select @Count 调试一下。

2.或者在程序语言中返回最后一个参数的值。

winzheng | 园豆:8797 (大侠五级) | 2009-11-18 09:31
0

http://www.cnblogs.com/leeyun/archive/2009/11/05/1596744.html

这上面我有具体的例子,你可以看下

另外,你要去总的记录数的话,可以另外写一个sql语句。因为有的时候我们的系统需要按照不同的条件对记录进行统计,你把这种统计加在分页中的话就会增加很多功能的耦合度,不利于后面其他模块的分离

persialee | 园豆:3217 (老鸟四级) | 2009-11-18 11:41
0
苏飞 | 园豆:2024 (老鸟四级) | 2009-11-18 13:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册