SQL SERVER 存储过程查询不出数据,而SELECT语句可以

createprocedureb_category;1(@categoryvarchar(50)=null)asbeginselect*frombookwherebnoi... create procedure b_category;1
(@category varchar(50)=null)
as
begin
select * from book where bno in (
select bno from book_category where
cname like '@category%')
end
----
execute b_category;1 文学
----
select * from book where bno in (
select bno from book_category where
cname like '文学%')-------------------------------这个就可以查询出来,是为什么呢
我最最主要的问题是,我查询不出数据。
create procedure b_category;1
(@category varchar)
as
begin
select * from book where bno in (
select bno from book_category where
cname =@category)
end
--------
execute b_category;1 文学
这个也是查询不出来的,请大家不要执着于LIKE ....
展开
 我来答
hit_lubin
2011-05-26 · TA获得超过7889个赞
知道大有可为答主
回答量:1554
采纳率:100%
帮助的人:2016万
展开全部
语句写的不对,最后的查询cname like '@category%',相当于查询@category开头的字符串了。也就是说@category已经不是变量,成了字符串的一部分了。因为单引号的关系。
要改成cname like @category+'%'
追问
不行啊。。。还是查询不出。
追答
前边那个语句,不是执着于LIKE,而是你的LIKE那地方肯定是写错了。
第二个你修改去掉Like后,首先,你定义的存储过程参数为字符型,可传入的是数字型。然后,请确认一下,以下的查询真能查到数据?
select * from book where bno in (
select bno from book_category where
cname = '1')
这个就是您说的去掉Like之后并把参数1带进去之后的查询。如果这个能查到,那么你过程肯定也有。

还有,我发现了一个最大的问题,原来没有注意,在你的存储过程的开始,给参数赋了一个初始值NULL,那么无论传进来是什么,进入存储过程,都会成NULL了。当然,你的Like那地方有错误是肯定的。但是按照我给您的语句,查不到结果,是因为null的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangshuaisupin
推荐于2017-12-15 · TA获得超过1884个赞
知道小有建树答主
回答量:805
采纳率:100%
帮助的人:1233万
展开全部
存储过程的代码这样改一下就可以了
create procedure b_category;1
(@category varchar(50)=null)
as
begin
EXEC('select * from book where bno in (select bno from book_category where cname like ‘’‘ + @category + ’%‘’')‘)
end
追问
语法错误啊。。
追答
多了个单引号
create procedure b_category;1
(@category varchar(50)=null)
as
begin
EXEC('select * from book where bno in (select bno from book_category where cname like ‘’‘ + @category + ’%‘’)‘)
end
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天堂鸟地狱火
2011-06-08
知道答主
回答量:38
采纳率:0%
帮助的人:12.4万
展开全部
先看是不是LIKE的问题,再看是不是参数的用法。简化一下,看以下SQL能返回结果吗
select bno from book_category where cname =@category

你的用法不对,这么写:

...
select bno from book_category where cname like @category
...
使用时:
execute b_category;1 ‘文学%’
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ERP小V
2011-05-26 · TA获得超过1257个赞
知道小有建树答主
回答量:1021
采纳率:82%
帮助的人:286万
展开全部
语句有问题
将cname like '@category%' 更改:
cname like ' '''+@category+'"% '
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ecc263c
2011-05-26 · TA获得超过624个赞
知道小有建树答主
回答量:478
采纳率:100%
帮助的人:377万
展开全部
create procedure b_category;1
(@category varchar(50)=null)
as
begin
exec('select * from book where bno in (
select bno from book_category where
cname like '''+@category+'%'')')
end
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式