找不到标量变量@caid

deadcalmtiger 2009-12-16 09:08:12
CREATE PROCEDURE procNewsSelectNewsByCaid
declare @caid int
AS
BEGIN
select n.id,n.title,n.createTime,c.[name] from news n
inner join category c on c.id = n.caId and n.caId = @caid
order by n.createTime desc
END
GO


报错:找不到标量变量@caid!
...全文
105 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jidianxueyuan 2009-12-16
  • 打赏
  • 举报
回复
@caid 要是procNewsSelectNewsByCaid 的话就这样

alter PROCEDURE procNewsSelectNewsByCaid
(
@caid int
)
AS

BEGIN
select n.id,n.title,n.createTime,c.[name] from news n
inner join category c on c.id = n.caId and n.caId =@caid
order by n.createTime desc
END
GO

jidianxueyuan 2009-12-16
  • 打赏
  • 举报
回复
这样改下就行了

CREATE PROCEDURE procNewsSelectNewsByCaid
AS
declare @caid int
BEGIN
select n.id,n.title,n.createTime,c.[name] from news n
inner join category c on c.id = n.caId and n.caId =@caid
order by n.createTime desc
END
GO
tkscascor 2009-12-16
  • 打赏
  • 举报
回复
你这个存储过程, 是在调用的时候报错? 还是你生成这个存储过程的时候报错?
deadcalmtiger 2009-12-16
  • 打赏
  • 举报
回复
这是完整代码来的!
我在创建news 表的时候将它的caid 是否允许空值设置为了否
会不会有关系呢!
特别 2009-12-16
  • 打赏
  • 举报
回复
顺便把你调用的主句也发上来
你调用的时候,应该是这样的
procNewsSelectNewsByCaid n
n为数字,表示传入的ID
特别 2009-12-16
  • 打赏
  • 举报
回复
你发的是不是该存储过程的完整内容,如果不是请发完整内容再看看
按道理,8楼的代码是没有问题的
deadcalmtiger 2009-12-16
  • 打赏
  • 举报
回复
回复#12:
n.caId = 2
可以正确显示结果!
那么说明问题的确是出现在了@id的声明
但是我的确在代码中声明了变量@id了!
特别 2009-12-16
  • 打赏
  • 举报
回复
参考8楼代码,应该是正确的
如果不对,
你直接执行下面的语句看看是否报错

select n.id,n.title,n.createTime,c.[name] from news n
inner join category c on c.id = n.caId and n.caId = 2
order by n.createTime desc


如果还报错,
请检查表名、字段名是否正确
是否表名、字段名含有空尾随空格等
deadcalmtiger 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tkascor 的回复:]
不可能!!
去掉declare  , 还是报这个错?
[/Quote]

是啊 !我都郁闷死了 ! 后台管理已经做到尾声了 ! 这个问题搞了我两天了!
实在不行 我就上论坛发帖请教CSDN的各位高手们了!
tkscascor 2009-12-16
  • 打赏
  • 举报
回复
不可能!!
去掉declare , 还是报这个错?
deadcalmtiger 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 bancxc 的回复:]
SQL codeCREATEPROCEDURE procNewsSelectNewsByCaid@caidintASBEGINselect n.id,n.title,n.createTime,c.[name]from news ninnerjoin category con c.id= n.caIdand n.caId=@caidorderby n.createTimedescENDGO你的是Sq?-
[/Quote]

是的 !sql2005 sever Express Edition
bancxc 2009-12-16
  • 打赏
  • 举报
回复
CREATE PROCEDURE procNewsSelectNewsByCaid 
@caid int
AS
BEGIN
select n.id,n.title,n.createTime,c.[name] from news n
inner join category c on c.id = n.caId and n.caId = @caid
order by n.createTime desc
END
GO
你的是SqlServer吗
deadcalmtiger 2009-12-16
  • 打赏
  • 举报
回复
楼上几位大虾们的方法都行不通!
deadcalmtiger 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tkascor 的回复:]
汗. 你加个declare干嘛,  不好意思 没留意.
你删掉就行了!
[/Quote]

之前我就是不加declare也报错,所以才加上去的, 发现还是行不通!!

加关键字where也不行!!
  
tkscascor 2009-12-16
  • 打赏
  • 举报
回复
汗. 你加个declare干嘛, 不好意思 没留意.
你删掉就行了!
zhujiazhi 2009-12-16
  • 打赏
  • 举报
回复
select n.id,n.title,n.createTime,c.[name] from news n
inner join category c on c.id = n.caId
where n.caId = @caid
order by n.createTime desc
tkscascor 2009-12-16
  • 打赏
  • 举报
回复
CREATE PROCEDURE procNewsSelectNewsByCaid
declare @caid int
AS
BEGIN
select n.id,n.title,n.createTime,c.[name] from news n
inner join category c on c.id = n.caId
where n.caId = @caid
order by n.createTime desc
END
GO
看这样行没!
波导终结者 2009-12-16
  • 打赏
  • 举报
回复
declare @caid int 是传进来的参数吗?

CREATE proc procNewsSelectNewsByCaid

(
@Ean13Code int
)
as XXXXX
庚武讲堂 2009-12-16
  • 打赏
  • 举报
回复

CREATE PROCEDURE procNewsSelectNewsByCaid
(
@caid int
)
AS
BEGIN
select n.id,n.title,n.createTime,c.[name] from news n
inner join category c on c.id = n.caId and n.caId = @caid
order by n.createTime desc
END

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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