为什么SQL语句换成存储过程就出错了 大侠来看下

laeep 2005-06-22 12:07:12
我的语句是
NewsSql = "Select top " & NewsListNumberStr & " *,NewsClass.FileExtName as ClassFileExtName,News.FileExtName as NewsFileExtName from News,NewsClass where News.ClassID=NewsClass.ClassID and News.AuditTF=1 and NewsClass.ClassID in (" & AllClassID & ") order by News.ID Desc"
Set RsNewsObj = Conn.Execute(NewsSql)
存储过程是
CREATE Procedure FS_ReFunSelfClass_News
(@num int,
@ClassIDStr varchar(1000))
as
begin transaction
declare @TempStr varchar(1500)
set @TempStr='Select top '+cast(@num as varchar(50))+' *,NewsClass.FileExtName as ClassFileExtName,News.FileExtName as NewsFileExtName from News,NewsClass where News.ClassID=NewsClass.ClassID and News.AuditTF=1 and NewsClass.ClassID in (' +cast(@ClassIDStr as varchar(1000))+') order by News.ID Desc'
exec(@TempStr)
if @@error=0
commit transaction
else
rollback transaction
return
GO
为什么 换了就不能正常运行,大侠来看看怎么改存储过程
...全文
130 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
laeep 2005-06-22
  • 打赏
  • 举报
回复
NewsClass.ClassID 是Varchar
@ClassIDStr的内容是'0561714203137329'
laeep 2005-06-22
  • 打赏
  • 举报
回复
在存储过程里面 怎么打印出来,怎么调试??
云中客 2005-06-22
  • 打赏
  • 举报
回复
语法上好像没有错误,是不是你的数据表上有问题
柯柯 2005-06-22
  • 打赏
  • 举报
回复
NewsClass.ClassID 是字符型的话,要处理变量 @ClassIDStr 的形式为('id1','id2','id3',....)

最好是不管NewsClass.ClassID是什么类型都处理成以上形式。
wangdehao 2005-06-22
  • 打赏
  • 举报
回复
应该是参数传递的问题,楼主把语句打出来看正不正确就可以了
vivianfdlpw 2005-06-22
  • 打赏
  • 举报
回复
可能是你的@ClassIDStr参数值的问题,这个值必须是形如1,2,3之类的字符
laeep 2005-06-22
  • 打赏
  • 举报
回复
有人说是参数传递的问题 说是Class in 那里的问题,我也不知道怎么改了
cemma 2005-06-22
  • 打赏
  • 举报
回复
你的调用有问题:你把第一个参数作为字符传进去了,但你的变量声明里要求是INT!!
cemma 2005-06-22
  • 打赏
  • 举报
回复
提示什么错误呢?

我遇到过类似情况,语句在程序中无法执行,但PRINT出来粘帖到查询分析器中就正常,
后来查明由于传入参数中带有非法字符导致
laeep 2005-06-22
  • 打赏
  • 举报
回复
是不是调用过程的时候的问题,我该怎么调用 我是这样写的
Set RsNewsObj = Conn.Execute("FS_ReFunSelfClass_News '"&NewsListNumberStr&"','"&AllClassID&"'")
laeep 2005-06-22
  • 打赏
  • 举报
回复
有意解决次此问题的请加我的QQ:196267664 加我注明“存储过程” 谢谢
laeep 2005-06-22
  • 打赏
  • 举报
回复
都是这个值 不用存储过程就完全正确 用存储过程就不能通过
wangdehao 2005-06-22
  • 打赏
  • 举报
回复
你错误的时候参数也是输入这个值吗?
laeep 2005-06-22
  • 打赏
  • 举报
回复
是字符型的,在查询器里面执行没问题
完全通过
vivianfdlpw 2005-06-22
  • 打赏
  • 举报
回复
ClassID是整型还是字符型?
把你的这个语句在查询分析器里执行看看
laeep 2005-06-22
  • 打赏
  • 举报
回复
打出来没错呀,
laeep 2005-06-22
  • 打赏
  • 举报
回复
Select top 10 *,NewsClass.FileExtName as ClassFileExtName,News.FileExtName as NewsFileExtName from News,NewsClass where News.ClassID=NewsClass.ClassID and News.AuditTF=1 and NewsClass.ClassID in ('0561714203137329') order by News.ID Desc
vivianfdlpw 2005-06-22
  • 打赏
  • 举报
回复
把语句打出来看看:

CREATE Procedure FS_ReFunSelfClass_News
(@num int,
@ClassIDStr varchar(1000))
as
begin transaction
declare @TempStr varchar(1500)
set @TempStr='Select top '+cast(@num as varchar(50))+' *,NewsClass.FileExtName as ClassFileExtName,News.FileExtName as NewsFileExtName from News,NewsClass where News.ClassID=NewsClass.ClassID and News.AuditTF=1 and NewsClass.ClassID in (' +cast(@ClassIDStr as varchar(1000))+') order by News.ID Desc'
print(@TempStr)
--exec(@TempStr)
if @@error=0
commit transaction
else
rollback transaction
return
GO

34,575

社区成员

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

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