sqlserver存储过程: Exec(@变量)在一个存储过程中调用如何有参数返回变量查询值

这是创建库与创建表的sql------------------创建product数据库-------------------------usemastergoifexis... 这是创建库与创建表的sql
------------------创建product数据库-------------------------
use master
go
if exists(select name from sysdatabases where name='product')
drop database product
go

create database product
on primary
(
name='product',
filename='D:\product.mdf',
size=3mb,
filegrowth=1mb
)
log on
(
name='product_log',
filename='D:\product.ldf',
size=2mb,
filegrowth=1mb
)
go
--------------------创建product表-------------------------
use product
go
create table product
(
p_id varchar(20) primary key not null,
p_name nvarchar(20) not null,
p_price money not null,
p_number int not null
)
go
-----------------------------------------------
insert product(p_id,p_name,p_price,p_number)
select '1001','pro_a',122,32 union all
select '1002','pro_b',1255,22 union all
select '1003','pro_c',11,12 union all
select '1004','pro_d',18,11
go
下面是存储过程
if exists(select name from sysobjects where name='proc_find_count')
drop proc proc_find_count
go
set nocount on
go
create proc proc_find_count
@column_name varchar(20),
@term varchar(20),
@count int output
as
declare @sel varchar(500)
set @sel = 'select @count=count(*) from product where '+@column_name+' like ''%'+@term+'%'''
Exec(@sel)
go

declare @count varchar(20)
exec proc_find_count 'p_name','c',@count output
print @count
不知道为什么运行错误!!!!
我做的是用字段不定的模糊查询,因为where后用如:@field like '''%' + @value + '%''',sql语句会把@field和@value当作常量比较。所以必须用Exec(@sql)来执行
我要实现的就是在一个存储过程中查询所有相符条件数据的行数,再在另一个存储过程中使用相符总行数进行分段查询。
展开
 我来答
youngboy921
2010-12-06 · TA获得超过169个赞
知道小有建树答主
回答量:154
采纳率:0%
帮助的人:173万
展开全部
set nocount on
go
create proc proc_find_count
@column_name varchar(20),
@term varchar(20)
as
declare @sel varchar(500)
set @sel = 'select count(*) from product where '+@column_name+' like ''%'+@term+'%'''
Exec(@sel)
go

declare @count varchar(20)
exec proc_find_count 'p_name','c'
你的@count没有任何作用,这样就可以足够了,你试下
坤山白茶
2010-12-10 · 超过29用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:42.6万
展开全部
create proc proc_find_count13
@column_name varchar(20)
,@term varchar(20)
as
declare @sel varchar(500)
SET @sel='declare @count int ;set @count=(select count(*) from product where ' + @column_name + ' like ''%'+@term+'%''); print @count;'
EXECute (@sel)
go
exec proc_find_count13 'p_name','c'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b72a5b2
2010-12-03
知道答主
回答量:34
采纳率:0%
帮助的人:25.2万
展开全部
你用print将sel打印出来看看,然后执行下打印出来的SQL,看能否执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ou376782552
2010-12-06 · TA获得超过174个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:160万
展开全部
因为哪个@sel的select语句是错的,单引号里面的语句是用于直接执行的,并不会去调用传入的参数,所以@sel里面的哪个@count是没有声明的变量,,不能执行,。
你可以把这个题的题目发给我,,我帮你看下
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式