[转载]存储过程和触发器笔记

[转载]存储过程和触发器笔记 – snidget – 博客园.

1. 存储过程和触发器是什么?

存储过程不能可以显著提高系统的执行速度,还能提高效率确保一致性.

1.1存储过程:一种数据库对象,将负责不同功能的语句分类放置起来,以便能反复使用.

1.2特点:


1.3存储过程的分类

分为五类,系统存储过程,用户定义存储过程,临时存储过程,远程存储过程,扩展存储过程.

临时存储过程又分为本地临时存储过程,全局临时存储过程.

分类

说明

系统存储过程 存储在master中,以sp开头,调用时不必加库名,如果参数是保留字或者数据库对象,用单引号包围.
用户定义存储过程 用户为完成一定的功能定义在数据库中存储过程.
临时存储过程 本地临时:#开头,放在tempdb中,连接断开之后自动删除,本库使用.
全局临时:##开头,放在tempdb中,连接断开后使用完之后自动删除,本连接的所有库可以使用.注意命名.
远程存储过程 位于远程服务器上的存储过程.通过分布式查询和execute执行.
扩展存储过程 外部程序写的存储过程,xp开头,动态链接库形式存在,也放在master

1.4存储过程优点


1.5存储过程和视图的比较


1.6创建存储过程

格式:


例子:

create procedure ShowAllStudent

as

begin

select * from students

end

1.7执行存储过程

格式:exec procedure_name

例子:exec  ShowAllStudent

1.8带输入参数存储过程

格式:


例子:

create procedure SelectStudentByStu_no

@sno char(12)=‘200501020319’

as

begin

select * from students where stu_no=@sno

end

1.9执行带输入参数的存储过程

格式:


例子:

exec SelectStudentByStu_no

@sno=‘200501030218’

当参数比较少的时候,可以按照位置传递参数.

例子:

exec SelectStudentByStu_no ‘200501030218’

1.10带输出参数的存储过程

格式:


例子:

create procedure GetStudentCountByStu_sex

@sex char(2)=,

@count int=0 output

as

begin

set

@count=(select count(*) from students where stu_gender=@sex)

print @count

end

执行带输出参数的存储过程

例子:

declare @sex char(2) ,@count int

set @sex=

exec GetStudentCountByStu_sex @sex,@count

1.11 删除存储过程

Drop procedure GetPostsByBlogId

1.12 更新存储过程

alter procedure GetPostsByBlogId

(@blogid varchar(50))

As

Select top 5* from Posts where BlogId=@blogid

1.13 重命名存储过程

对象浏览器中修改.

1.14 重新编译存储过程

有三种方法:

1)创建的时候使用with Recompile 语句.

2)在执行过程中设定重新编译

3)调用系统存储过程重新编译

2. 触发器

基本表被在修改的时候通过事件触发而执行的存储过程.

作用是保证了由主键和外键所不能保证的参照完整性和数据完整性.

2.1触发器的优点

触发器可以包含复杂的处理逻辑,主要用来保持低级的数据完整性.优点如下.



2.2创建触发器

删除触发器:


例子:

create trigger dropStudent

on students

for delete

as

print 成功删除一条数据.’

更新触发器:

create trigger updateStudentName

on students

for update

as

if update (stu_name)

begin

print 不能更新主键,学生号码.’

rollback transaction

end

update students set

stu_name=五哥

where stu_no=‘200501020319’


删除触发器:略

查看触发器:

1) 使用系统的存储过程查看: exec sp_helptrigger students


使用系统表: select name from sysobjects where type=‘TR’


2) 管理器查看 略

删除触发器: drop trigger updateStudent

修改触发器:


重命名: sp_rename dropStudent,deleteStudentItem

启动和停止触发器:

alter table students enable trigger all

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏