请帮忙看一下我的存储过程出了什么问题

yuhaoloveyou 2009-06-02 10:31:59
我写了一个做分页的存储过程(写了一半),在测试的时候出了错误。不知道错误在那里
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 OUTPUT

EXECUTE 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 @all

execute (@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
...全文
70 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hery2002 2009-06-02
  • 打赏
  • 举报
回复
重新定义一下@SQL这个参数的类型.
declare @sql varchar(8000) 

-->
declare @sql nvarchar(8000) 

好好看看sp_executesql的参数类型.
yuhaoloveyou 2009-06-02
  • 打赏
  • 举报
回复
不好意思,你的存储过程只能返回分页记录,我是想把所有的判断、计算都由它搞定。
一束光丫. 2009-06-02
  • 打赏
  • 举报
回复
这是公用的分页存储过程。你直接copy到数据库运行。
一束光丫. 2009-06-02
  • 打赏
  • 举报
回复
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 '+@Sort

PRINT @Str

EXEC sp_ExecuteSql @Str
GO
you_tube 2009-06-02
  • 打赏
  • 举报
回复
结帖率:57.14%
jiangshun 2009-06-02
  • 打赏
  • 举报
回复
过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型。
你给的参数类型错了

34,590

社区成员

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

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