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 '
endSET @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 @Strset @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,但偏偏执行查询的结果却显示正常??

解决方案 »

  1.   

    写这个东西是为了程序里面datagrid分页时用的,而输出的那个参数是为了给datagrid的属性VirtualItemCount赋值。但不晓得就是不对
      

  2.   

    EXEC(@A)
    SET @I=@@ROWCOUNTset @Str='select count(*) itemCount from ('+CAST(@sql AS varchar(100))+') x'
    exec @Itemcnt =sp_executesql @Str 
      

  3.   

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