我写了一个做分页的存储过程(写了一半),在测试的时候出了错误。不知道错误在那里
create proc fenye2
(
@table_name varchar(100),--表名
@primary_key varchar(100),--唯一字段
@strGetFields varchar(1000) , -- 需要返回的列 
@strOrder varchar(400), -- 排序类型
@pagesize int, --页面大小,如每页存储20条记录
@pageindex int, --当前页码
@condition varchar(3000), --查询条件
@all int OUTPUT
)as  
begin
declare @max int
declare @min int
declare @sql varchar(8000)
set @sql = 'select @all = count(*) from '+@table_name+' '+@condition
execute sp_executesql 
@sql,    --执行上面的sql语句
N'@all int OUTPUT' ,   --执行输出数据的sql语句,output出总记录数
@all  OUTPUTEXECUTE sp_executesql N'SELECT * FROM AdventureWorks.HumanResources.Employee WHERE ManagerID = @level', N'@level tinyint', @level = 109;
set @max=@pagesize*@pageindex
set @min=@pagesize*(@pageindex-1)set @sql='select   *   from (select   top '+ltrim(@max)+' '+@strGetFields+' from '+@table_name+' '+@condition+ 'order by '+@strOrder+' ) a where '+@primary_key
+'  not   in   (select   top '+ltrim(@min)+' '+@primary_key+' from '+@table_name+' '+@condition+'order by '+@strOrder+')';--exec 
--set @sql='select   *   from (select   top'+@max--print @allexecute (@sql)
end
go 
错误信息:
服务器: 消息 214,级别 16,状态 2,过程 sp_executesql,行 27
过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型。应该是在
execute sp_executesql 
@sql,    --执行上面的sql语句
N'@all int OUTPUT' ,   --执行输出数据的sql语句,output出总记录数
@all  OUTPUT
这一段出的问题,不过本事没怎么用过sp_executesql不知道这样写对不对。能不能把要的值付给@all

解决方案 »

  1.   

    过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型。
    你给的参数类型错了
      

  2.   

    CREATE procedure ListPage
    /*.分页存储过程..返回指定返回条数、指定页数的记录*/
    (
     @SQL nVARCHAR(4000),--选择的SQL语句
     @Page int,--页号
     @RecsPerPage int,--返回记录数
     @ID VARCHAR(255),--主键
     @Sort VARCHAR(255)--排序字段,T9是表别名
    )
    AS
    SET NOCOUNT ON
    DECLARE @Str nVARCHAR(4000)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+') ORDER BY '+@SortPRINT @StrEXEC sp_ExecuteSql @Str
    GO
      

  3.   

    这是公用的分页存储过程。你直接copy到数据库运行。
      

  4.   

    重新定义一下@SQL这个参数的类型.
    declare @sql varchar(8000) 
    -->
    declare @sql nvarchar(8000) 
    好好看看sp_executesql的参数类型.