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)来执行
我要实现的就是在一个存储过程中查询所有相符条件数据的行数,再在另一个存储过程中使用相符总行数进行分段查询。 展开
------------------创建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)来执行
我要实现的就是在一个存储过程中查询所有相符条件数据的行数,再在另一个存储过程中使用相符总行数进行分段查询。 展开
展开全部
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没有任何作用,这样就可以足够了,你试下
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没有任何作用,这样就可以足够了,你试下
展开全部
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'
@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'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你用print将sel打印出来看看,然后执行下打印出来的SQL,看能否执行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为哪个@sel的select语句是错的,单引号里面的语句是用于直接执行的,并不会去调用传入的参数,所以@sel里面的哪个@count是没有声明的变量,,不能执行,。
你可以把这个题的题目发给我,,我帮你看下
你可以把这个题的题目发给我,,我帮你看下
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询