高手们,帮我看看我的存储过程错在哪里?很怪!

qq6212639 2009-05-18 12:13:46
我写了一个很简单的分页的存储过程 我要对一个带条件的视图进行操作 但是不知道为什么 他老是报这个错

消息 102,级别 15,状态 1,过程 proc_Getpage,第 8 行
'+@tbname+' 附近有语法错误。
消息 102,级别 15,状态 1,过程 proc_Getpage,第 8 行
'+@tbname+' 附近有语法错误。

我把那个sql语句拿出来执行又没有错
我的存储过程是这样写的

if exists(select * from sysobjects where name='proc_Getpage')
drop procedure proc_Getpage
go
create proc proc_Getpage
@fieldname varchar(10),
@tbname varchar(10),
@pagesize int,
@strWhere varchar(100)
as
begin
select top 8 * from '+@tbname+' where '+@fieldname+' not in(select top ('+Convert(varchar,@pagesize)+'*8) '+@fieldname+' from '+@tbname+') and '+@strWhere+'
end


我这样操作的时候又没有错


select top 8 * from v_meeting where mt_id not in(select top (1*8) mt_id from v_meeting) and mt_state='已召开'


求大侠们帮忙看看 谢谢!
...全文
84 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL77 2009-05-18
  • 打赏
  • 举报
回复
只能用动态来了啦!!!要不然只能将变量赋值才行!
Zoezs 2009-05-18
  • 打赏
  • 举报
回复
当你执行的语句中有变量时,直接执行就会报错的。
Zoezs 2009-05-18
  • 打赏
  • 举报
回复
听钻钻的。
sdhdy 2009-05-18
  • 打赏
  • 举报
回复
用动态SQL.
子陌红尘 2009-05-18
  • 打赏
  • 举报
回复
if exists(select * from sysobjects where name='proc_Getpage')
drop procedure proc_Getpage
go
create proc proc_Getpage
@fieldname varchar(10),
@tbname varchar(10),
@pagesize int,
@strWhere varchar(100)
as
begin
declare @sql varchar(8000)
set @sql='select top 8 * from '+@tbname+' where '+@fieldname+' not in(select top ('+Convert(varchar,@pagesize)+'*8) '+@fieldname+' from '+@tbname+') and '+@strWhere+''

exec(@sql)
end
qq6212639 2009-05-18
  • 打赏
  • 举报
回复
谢谢!问题已经解决!

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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