存储过程的概念
存储过程是独立存在于表之外的数据库对象,由被编译在一起的一组Transact-SQL语句组成。它可以被客户调用,也可以被另一个存储过程或触发器调用,它的参数可以被传递。
触发器的概念
触发器是一种特殊类型的存储过程,它不能显示地被调用,它是在指定的表中插入记录、更改记录或者删除记录时,被自动激活。所以,触发器可以用来对表实施复杂的完整性约束,当触发器所保护的数据发生改变时,触发器会自动被激活,从而防止对数据的不正确的修改。
二者的区别
触发器是特殊类型的存储过程,它能在任何试图改变表中由触发器保护的数据时执行。触发器主要通过事件进行触发而被执行,触发器不能直接调用执行,也不能被传送和接受参数,而存储过程可以通过存储过程名被直接调用。触发器与表有关,存储过程与表无关。
举例
例1
USE Stu_Course
--检查是否已存在同名的存储过程,若有,则删除。
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'stu_info_pro' AND type = 'P')
DROP PROCEDURE stu_info_pro
GO
--创建存储过程
CREATE PROCEDURE stu_info_pro
AS
SELECT Sname,Ssex,Sdept
FROM Student
GO
EXEC stu_info_pro
例2
USE Stu_Course
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'stu_score_pro' AND type = 'P')
DROP PROCEDURE stu_score_pro
Go
CREATE PROCEDURE stu_score_pro
@sname char(10),@cname char(10)
AS
SELECT a.Sname,c.Cname,b.Grade,c.Ccredit
FROM Student a,SC b,Course c
WHERE a.Sno=b.Sno and b.Cno=c.Cno and
c.Cname=@cname and a.Sname=@sname
EXEC stu_score_pro '李勇','数据库'