SQL 存储过程中参数怎么使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 存储过程中参数怎么使用相关的知识,希望对你有一定的参考价值。

参数定义
单个参数
1>
CREATE
PROCEDURE
HelloWorld1
2>
@UserName
VARCHAR(10)
3>
AS
4>
BEGIN
5>
PRINT
'Hello'
+
@UserName
+
'!';
6>
END;
7>
go
1>
DECLARE
@RC
int;
2>
EXECUTE
@RC
=
HelloWorld1
'Edward'
;
3>
PRINT
@RC;
4>
go
HelloEdward!
0
IN、OUT、IN
OUT
注:
SQL
Server

OUTPUT
需要写在变量数据类型后面。
SQL
Server
没有
IN
OUT
关键字
OUTPUT
已经相当于
IN
OUT
了。
1>
CREATE
PROCEDURE
HelloWorld2
2>
@UserName
VARCHAR(10),
3>
@OutVal
VARCHAR(10)
OUTPUT,
4>
@InoutVal
VARCHAR(10)
OUTPUT
5>
AS
6>
BEGIN
7>
PRINT
'Hello
'
+
@UserName
+
@InoutVal
+
'!';
8>
SET
@OutVal
=
'A';
9>
SET
@InoutVal
=
'B';
10>
END;
11>
go
1>
2>
DECLARE
@RC
int,
@OutVal
VARCHAR(10),
@InoutVal
VARCHAR(10);
3>
BEGIN
4>
SET
@InoutVal
=
'~Hi~';
5>
EXECUTE
@RC
=
HelloWorld2
'Edward',
@OutVal
OUTPUT,
@InoutVal
OUTPUT;
6>
PRINT
@RC;
7>
PRINT
'@OutVal='
+
@OutVal;
8>
PRINT
'@InoutVal='
+
@InoutVal;
9>
END
10>
go
Hello
Edward~Hi~!
0
@OutVal=A
@InoutVal=B
参数的默认值
1>
CREATE
PROCEDURE
HelloWorld3
2>
@UserName
VARCHAR(10),
3>
@Val1
VARCHAR(20)
=
'
Good
Moning,',
4>
@Val2
VARCHAR(20)
=
'
Nice
to
Meet
you'
5>
AS
6>
BEGIN
7>
PRINT
'Hello
'
+
@UserName
+
@Val1
+
@Val2
+
'!';
8>
END;
9>
go
1>
2>
DECLARE
@RC
int;
3>
BEGIN
4>
EXECUTE
@RC
=
HelloWorld3
'Edward';
5>
PRINT
@RC;
6>
EXECUTE
@RC
=
HelloWorld3
'Edward',
'
Good
Night,';
7>
PRINT
@RC;
8>
EXECUTE
@RC
=
HelloWorld3
'Edward',
'
Good
Night,',
'
Bye';
9>
PRINT
@RC;
10>
END
11>
go
Hello
Edward
Good
Moning,
Nice
to
Meet
you!
0
Hello
Edward
Good
Night,
Nice
to
Meet
you!
0
Hello
Edward
Good
Night,
Bye!
0
指定参数名称调用
此部分使用
“参数默认值”那一小节的存储过程。
用于说明当最后2个参数是有默认的时候,如何跳过中间那个。
1>
DECLARE
@RC
int;
2>
BEGIN
3>
EXECUTE
@RC
=
HelloWorld3
'Edward';
4>
PRINT
@RC;
5>
EXECUTE
@RC
=
HelloWorld3
'Edward',
@Val1='
Good
Night,';
6>
PRINT
@RC;
7>
EXECUTE
@RC
=
HelloWorld3
'Edward',
@Val1='
Good
Night,',
@Val2='
Bye';
8>
PRINT
@RC;
9>
EXECUTE
@RC
=
HelloWorld3
'Edward',
@Val2='
HeiHei
';
10>
PRINT
@RC;
11>
END
12>
go
Hello
Edward
Good
Moning,
Nice
to
Meet
you!
0
Hello
Edward
Good
Night,
Nice
to
Meet
you!
0
Hello
Edward
Good
Night,
Bye!
0
Hello
Edward
Good
Moning,
HeiHei
!
0
参考技术A 存储过程不支持的可以考虑使用用户定义函数来实现,如:
CREATE
FUNCTION
Order_Customer
(@FirstName
varchar(20),@LastName
varchar(20))
RETURNS
@Order_
参考技术B 例如定义一个变量
minid
是时间类型的,然后再查询这个变量的语句是
declare
@minid
datetime;
select
@minid
=
min(createtime)
from
tableA;

SQL中in参数在存储过程中传递及使用的方法

背景:

1、使用存储过程

2、存储过程中有in

3、in括号里面的内容作为参数传递

解决方案:

1、直接拼接sql

可在存储过程中拼接字符串,然后执行此字符串,类似于js中的eval

PROCEDURE [dbo].[INSelect]
    @P_0 NVARCHAR(600)        
AS
  DECLARE @A VARCHAR(6000)
  SET @A=‘SELECT * FROM testTb WHERE zip IN (‘[email protected]_0+‘)‘ 

  然后用系统存储过程sp_executesql执行@A即可!

2、定义方法将字符切割为集合

切割字符串方法

Create function  func_split_hongfei0416j (@SourceSql   varchar(8000),@StrSeprate   varchar(2))   
  returns   @temp   table(col   varchar(100))   
  as     
  begin   
  declare   @ch   as   varchar(100)   
  set   @[email protected][email protected]     
  while(@SourceSql<>‘‘)   
                  begin   
                  set   @ch=left(@SourceSql,charindex(@StrSeprate,@SourceSql,1)-1)   
  insert   @temp   values(@ch)   
  set   @SourceSql=stuff(@SourceSql,1,charindex(@StrSeprate,@SourceSql,1),‘‘)   
                  end   
  return   
  end 

存储过程书写demo

CREATE PROC ps_spit_test      
( 
    @lettertype VARCHAR(100)  
)      
AS      
BEGIN      
  select * from y_paper 
  where lettertype in (select Col As lettertype 
from dbo.func_split_hongfei0416j(@lettertype,‘,‘))
end

exec ps_spit_test ‘118,148,163‘

 

如果是简单的sql直接使用第一种方法即可,

复杂写的可以使用第二方法。

 

也可以使用临时表的方法,

不过依然需要先切割字符串。

 

以上是关于SQL 存储过程中参数怎么使用的主要内容,如果未能解决你的问题,请参考以下文章

带参数的ms sql server的扩展存储过程,怎么传递参数

sql数据库中怎样调用带参数的存储过程

sqlserver怎么创建存储过程

sqlserver里存储过程怎么调用存储过程

sqlserver怎么创建存储过程

plsql调用oracle存储过程有输入参数和输出参数 sql语句怎么写如题 谢谢了