帮忙看一下SQL存储过程输出参数究竟出了什么问题?

dugupiaoyun 2006-09-06 03:00:25
use pubs
go
------数据分页存储过程------
CREATE PROCEDURE ReturnPageData
(
@SQL nVARCHAR(4000), --查询语句
@Page int, --当前页数
@RecsPerPage int, --分页项数
@ID VARCHAR(255), --主键字段
@Sort VARCHAR(255), --排序字段
@SortType smallint =0, --排序方式
@Itemcnt int output --输出总记录数
)
AS
DECLARE @Str nVARCHAR(4000)
Declare @strSortType nvarchar(10) ----数据排序规则A
Declare @strFSortType nvarchar(10) ----数据排序规则B
if @SortType=0
begin
set @strFSortType=' ASC '
set @strSortType=' DESC '
end
else
begin
set @strFSortType=' DESC '
set @strSortType=' ASC '
end

SET @Str='SELECT TOP '+CAST(@RecsPerPage AS VARCHAR(20))+' * FROM ('+@SQL+') T WHERE T.'+@ID+' NOT IN
(SELECT TOP '+CAST((@RecsPerPage*(@Page-1)) AS VARCHAR(20))+' '+@ID+' FROM ('+@SQL+') T9 ORDER BY '+@Sort+' '+@strSortType+') ORDER BY '+@Sort+' '+@strFSortType
EXEC sp_ExecuteSql @Str

set @Str='select count(*) itemCount from ('+CAST(@sql AS varchar(100))+') x'
exec @Itemcnt =sp_executesql @Str
return
GO

------调用------
declare @imcnt int
EXEC ReturnPageData 'select * from titles', 1, 5, 'title_id', 'pubdate',@Itemcnt=@imcnt output
print @imcnt

----这里为什么@pcnt打印出来一直为0,但偏偏执行查询的结果却显示正常??
...全文
298 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dugupiaoyun 2006-09-06
  • 打赏
  • 举报
回复
写错了@imcnt实际上就是@pcnt
yczealot 2006-09-06
  • 打赏
  • 举报
回复
set @Str='select count(*) itemCount from ('+CAST(@sql AS varchar(100))+') x'
exec @Itemcnt =sp_executesql @Str

改为
exec(@sql)
select @itemcnt=@@rowcout
yczealot 2006-09-06
  • 打赏
  • 举报
回复
EXEC(@A)
SET @I=@@ROWCOUNT

set @Str='select count(*) itemCount from ('+CAST(@sql AS varchar(100))+') x'
exec @Itemcnt =sp_executesql @Str

specialsoldier 2006-09-06
  • 打赏
  • 举报
回复
@pcnt 在哪里?
dugupiaoyun 2006-09-06
  • 打赏
  • 举报
回复
来人帮忙啊
dugupiaoyun 2006-09-06
  • 打赏
  • 举报
回复
写这个东西是为了程序里面datagrid分页时用的,而输出的那个参数是为了给datagrid的属性VirtualItemCount赋值。但不晓得就是不对

34,575

社区成员

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

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