sql如何存储过程中申请@变量

CREATE PROCEDURE [dbo].[p_sele_sp] @spbh varchar(20) , @zjm varchar(100) , @sptm varchar(20) , @splb varchar(20)
AS

SELECT TOP 200 spbh,spname,dw,spgg,scqy,spcd,sl,lsj,zdsj,spid,splb,jj,
sptm,spsx,kfid,jx,pzwh,is_sy,jbz,zbz,ajia,bjia,cjia,djia,bz,bz1,bz2,bz3,bz4,bz5,bz6,bz7,bz8,bz9
FROM t_sp_info
WHERE ( status = '是' ) AND
( pym like @zjm OR spname like @zjm OR spbh like @spbh OR sptm like @sptm ) AND
( splb like @splb )

为什么我执行查询的时候表示表已存在。
然后执行下面的查询条件的时候变量不存在。
现在问题是程序调用不出来。
而且报错。
然后我在sql里面执行存储过程说未设定@spbh的参数。
软件里面报
select Error : SQLSTATE = 42000
为过程和函数 p_sele_sp 指定参数太多。

整个语句块创建了一个存储过程,其中的查询使用了存储过程的参数。你可以通过直接执行存储过程,将值传给传出过程的参数,来实现执行查询。
例如:
execute dbo].[p_sele_sp] '%a%','1%',‘aaa%’,'bbb%';

如果希望直接执行查询语句,则需要用declare关键字事先声明变量。如下:
-- 声明变量
declare @spbh varchar(20) , @zjm varchar(100) , @sptm varchar(20) , @splb varchar(20)
-- 给变量赋值
set @spbh = ’%a%'
set @zjm = '1%'
set @sptm = ‘aaa%’
set @splb = 'bbb%'

--执行查询
SELECT TOP 200 spbh,spname,dw,spgg,scqy,spcd,sl,lsj,zdsj,spid,splb,jj,
sptm,spsx,kfid,jx,pzwh,is_sy,jbz,zbz,ajia,bjia,cjia,djia,bz,bz1,bz2,bz3,bz4,bz5,bz6,bz7,bz8,bz9
FROM t_sp_info
WHERE ( status = '是' ) AND
( pym like @zjm OR spname like @zjm OR spbh like @spbh OR sptm like @sptm ) AND ( splb like @splb )追问

现在问题是程序调用不出来。
而且报错。
然后我在sql里面执行存储过程说未设定@spbh的参数。
软件里面报
select Error : SQLSTATE = 42000
为过程和函数 p_sele_sp 指定参数太多。

追答

在程序里指定的参数多了。这个存储过程只接受4个参数。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-07
你创建的带参数存储过程,执行存储过程并赋值参数
exec p_sele_sp 'a','b','c','d'
若直接执行内部语句,那么需要用declare定义变量
declare @spbh varchar(20)
第2个回答  2012-11-07
CREATE PROCEDURE [dbo].[p_sele_sp] @spbh varchar(20) , @zjm varchar(100) , @sptm varchar(20) , @splb varchar(20)
AS

SELECT TOP 200 spbh,spname,dw,spgg,scqy,spcd,sl,lsj,zdsj,spid,splb,jj,
sptm,spsx,kfid,jx,pzwh,is_sy,jbz,zbz,ajia,bjia,cjia,djia,bz,bz1,bz2,bz3,bz4,bz5,bz6,bz7,bz8,bz9
FROM t_sp_info
WHERE ( status = '是' ) AND
( pym like '%'+@zjm+'%' OR spname like '%'+@zjm+'%' OR spbh like '%'+@spbh+'%' OR sptm like '%'+@sptm+'%' ) AND
( splb like '%'+@splb+'%' )本回答被网友采纳

在SQL存储过程中,如何声明变量,赋值变量。最好有具体语句配上实例。3Q...
Sql server 存储过程中怎么将变量赋值 \/ --SQL赋值语句 DECLARE @test1 INT SELECT @test1 = 111 SET @test1 = 222 --SQL函数赋值,假定count()是自定义函数 DECLARE @test2 INT SELECT @test2 = COUNT(*) FROM sys.sysobjects --SQL存储过程赋值,直接传参处理(类似C语言中的指针吗)IF OBJEC...

sql 存储过程中 如何使用declare 有的存储过程声明了,有的没有声明...
1、打开SQL Database Studio。2、点击展开数据库连接和数据库。3、右击要修改的存储过程,然后点击【alter procedure】。4、此时进入存储过程编辑界面。5、修改存储过程语句。6、点击左侧的【execute】。7、此时显示执行结果,成功表示存储过程的定义修改完成了。

...Exec(@变量)在一个存储过程中调用如何有参数返回变量查询值_百度知 ...
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_...

SQL存储过程 @@rowcount使用
create table t1(name varchar(40))insert into t1 select 'abc'insert into t1 select 'def'insert into t1 select 'ghi'--创建临时表 create table #t (ID int IDENTITY, yhm_name varchar(40))--向临时表中写入数据 insert into #t select name from t1 select @@rowcount --取得记录总数...

SQL SERVER的存储过程的declare函数的使用?谁知道!
变量是在批处理或过程的主体中用 DECLARE 语句声明的,并用 SET 或 SELECT 语句赋值。游标变量可使用此语句声明,并可用于其他与游标相关的语句。所有变量在声明后均初始化为 NULL。 <\/IMG>Transact-SQL 语法约定<\/IMG>语法 DECLARE {{ @local_variable [AS] data_type } | { @cursor_vari...

sql存储过程. 统计一个表所有行数 ,放到一个局部变量
select count(主键) form 表名 主键数量就是你的表的纪录数 也是行数。

sql 存储过程 出现 需要声明标量变量@r
如果@ApproverDepartment是字符型,而且值为数字(如'9'),则该语句没有任何错误 你可以把select @sqlCommand的输出结果拷贝上来,一起看一下。

SQL 存储过程变量
1')select @sql = '(select count(*) FROM Cxuqiu where '+ @b +' = ''1'' and '+ @b1 +' = ''1'')'print @sqlselect @bb1--上面的set 是我随便写的,你把你的列值代入进去即可。 主要是print @sql这句,打印输出你的动态SQL语句,然后执行这个打印出来的结果才能发现问题。

SQL存储过程 必须声明标量变量问题 数据库中执行成功,但是当我用程序调...
exec('insert into ' +@tablename+ ' values(@caname,@firsturl,@num,@secondurl,@fromurl,@flg)')修改一下:exec('insert into ' +@tablename+ ' values('+@caname+ ','+@firsturl+ ','+@num+ ','+@secondurl+ ','+@fromurl+ ','+@flg+ ')')...

MSSQL存储过程输入变量怎么设置?
变量类型不应该用等号 user是关键字,应该中括号括起来 你@id是整型,你后边为什么要用引号啊,这样就变字符了 你执行的时候存储过程名不对呀,名字叫test_1,你调用的test_综上所述 create procedure test_1@id intasselect [user] from dbo.[user] where id=@id 执行时 exec test_1 2003 ...

相似回答
大家正在搜