现在的位置: 首页 > 综合 > 正文

存储过程的语法格式和使用

2017年06月12日 ⁄ 综合 ⁄ 共 2473字 ⁄ 字号 评论关闭

   对数据库进行操作的时候,我们可以使用sql语句,也可以使用存储过程,那么使用存储过程有什么好处呢,首先它是预编译的语句,所以效率很高,其次就是很安全,用sql语句的时候有可能会被进行sql注入,存储过程完全被隐藏的,所以会避免,很安全,一般的情况下,一些小项目,比如web开发的时候,小企业站可以使用sql语句,大型的行业网站从安全和性能可以使用存储过程。
备注:可在Sql Server的管理器中通过新建存储过程创建测试,保证其在后台的语法的合理性。

预备知识:

创建存储过程的基本格式:

---判断是否存在存储过程
if exists( select name from sysobjects where name='proc_name' )                  //if exists:判断是否存在
    drop proc proc_name                                                                                         // drop proc :  删除存储过程,后面接存储过程名称,名称不用引起来
go
---创建存储过程
//create proc: 创建存储过程,后面接存储过程名称,名称不用引起来@parameter  varchar(20): 参数,在执行存储过程的时候需要传入的参数,这里是字符类型,如果有多个参数的话,除了最后一个参数,其他的参数后面需要加逗号(英文状态),如果不需要传入,直接去掉就行了。
create  proc  proc_name @parameter  varchar(20), @parameter2  int  
as                                                             //as : 关键字
  主体语句                                         //主体语句:就是你要做的操作的语句,和平时的完全一样,存储过程就相当把平时的sql语句在外面加了个壳的感觉。
go
例1 无参存储过程  这里你需要查询一个表  select * from tableName1
create  proc  proc_name
as
    select * from tableName1
go
例 2带参存储过程:
create  proc  proc_name  @parameter  varchar(20)
as
    select * from tableName where name=@parameter 
go
执行的时候这样  exec  proc_name '小明'       //注意要加上单引号

注释:GO 是一个批处理实用工具命令.它可以由任何用户执行。其实相当于点击一次“!”执行查询功能。GO 10,代表执行10次存储过程。

1、例如,在同一批处理中,创建数据库之后不能直接使用其新建的数据库.局部(用户定义)变量的作用域限制在一个批处理中,不可在 GO 命令后引用.
create database [Roc]
use [Roc]
GO
--运行此批处理后,系统会报错,把此批处理分成两个批即可正确运行,修改如下。
create database [Roc]
GO
use [Roc]
GO

2、由于局部变量的作用域要限制在一个批处理中,所以在执行下面语句会报错,

declare @Roc varchar(max)
Select @Roc = 'aking'
GO
print @Roc
GO

修改为

declare @Roc varchar(max)
Select @Roc = 'aking'
print @Roc
GO

下面举例说明存储过程的写法:

A、不带参数的存储过程

create proc stuInfo
as
select * from student
go

B、带参数的存储过程

create proc stuBysex @sex varchar(50)
as
select * from student where sex=@sex
go

C、带输出参数的存储过程

create proc stuOutNamebyid
@outName varchar(50) output
as
select @outName=name from student where id='2'
go

declare @outName varchar(50) //一定要声明一下,否则会没有数据显示结果,只有sql语句分析结果
exec stuOutNamebyid @outName output
print @outName              //也可写为select @outName   
go

下面是增删改的存储过程

增加
create proc insertStu @name varchar(50),@sex varchar(50),@age int,@address varchar(50)
as
insert into Student(name,sex,age,address)values(@name,@sex,@age,@address)
go

exec insertStu 'shuang','女',34,'aaa'
go
删除
create proc delStu @id int
as
delete from Student where id=@Id
go

exec delStu '5'
go
修改
create proc UpdateStu @id int
as
update Student set name='aa' where id=@id
go

exec UpdateStu '4'
go

在创建存储过程的时候可以为参数赋默认值

alter proc proDemo   @ datetime='2011-1-1',@c datetime='2011-5-30'
as
select top 20 * from  u_userinfo where regdate between @b and @c
go
执行的时候,如果没有参数,可以不用写.exec proDemo

参考学习:http://www.cnblogs.com/scholar1986/archive/2010/03/24/1694086.html

抱歉!评论已关闭.