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 .... 展开
(@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 .... 展开
5个回答
展开全部
语句写的不对,最后的查询cname like '@category%',相当于查询@category开头的字符串了。也就是说@category已经不是变量,成了字符串的一部分了。因为单引号的关系。
要改成cname like @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的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
存储过程的代码这样改一下就可以了
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
追问
语法错误啊。。
追答
多了个单引号
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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先看是不是LIKE的问题,再看是不是参数的用法。简化一下,看以下SQL能返回结果吗
select bno from book_category where cname =@category
你的用法不对,这么写:
...
select bno from book_category where cname like @category
...
使用时:
execute b_category;1 ‘文学%’
select bno from book_category where cname =@category
你的用法不对,这么写:
...
select bno from book_category where cname like @category
...
使用时:
execute b_category;1 ‘文学%’
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
语句有问题
将cname like '@category%' 更改:
cname like ' '''+@category+'"% '
将cname like '@category%' 更改:
cname like ' '''+@category+'"% '
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
(@category varchar(50)=null)
as
begin
exec('select * from book where bno in (
select bno from book_category where
cname like '''+@category+'%'')')
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询