存储过程和触发器

存储过程:

定义:存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。

使用存储过程的优点

1.    在服务器端运行,执行速度快。

2.       执行一次后,其执行规划就驻存高速缓冲存储器中,以后操作时只需从高速缓冲存储器中调用已编译后的二进制代码执行,提高了系统性能。

3.       确保数据库的安全。

4.       自动完成需要预先执行的任务。

存储过程的类型

系统存储过程:由系统提供,作为命令执行各种操作。

本地存储过程:在用户数据库中创建,可完成特定操作任务。

临时存储过程:只能在一个用户会话中使用。名称以#开头。

远程存储过程:从远程服务器上调用。

扩展存储过程:是指在SQL Server环境之外执行的动态链接库,其前缀是sp_

存储过程的语句:

创建格式:

Create procedure procedue_name

[@parameter data_type][output]  

  [with]{recompile|encryption}

  as

sql_statement

解释:@paramete是存储过程的形参,data_type用于指定形参的数据类型

  Output指示参数是输出参数,可返回信息。

recompile|encryption参数的处理方式。

sql_statement代表过程体包含的T-SQL语句。

1:返回081101号学生的成绩情况。该过程不适用参数。

USE_PXSCJ

GO

Create procedure student_info

  As

     Select *

         From CJB

Where 学号=’081101’

GO

 

执行存储过程:

通过EXEC命令可以执行一个已定义的存储过程

2:执行例1的存储过程。

Exec student_info

用户存储过程的删除:

格式:Drop procedure procedure_name.

3:删除例1的存储过程。

Drop procedure student_info

用户存储过程的修改:

格式:alter procedure procedure_name.

4:创建名为select_students的存储过程,默认情况下,该存储过程可查询所有学生的信息,然后授权。当该存储过程需要更改为能检索计算机专业的学生信息时,用alter procedure 重新定义该存储过程。

程序如下:

Create procedure select_students//创建存储过程

  As

   Select *

From XSB

   Order by 学号

Go

Alter procedure select_students with encryption

 As

  Select *

From XSB

 Where 专业=’计算机

Order by 学号

Go

触发器:

定义:触发器是一类特殊的存储过程,在对特定表或视图发出 UPDATEINSERT DELETE 语句时自动执行。

注意:触发器不需要调用,也不传参或接受参数,当对一个表的特殊事件出现时,它就会被激活。

作用:用于保护表中的数据。

触发器的类型

DML触发器:当对表进行insert,updatedelete操作时发生。作用是:保持数据库中数据的完整性。

DDL触发器:当进行alter,dropcreate操作时发生。作用是:执行管理操作。

触发器中的特殊表:

inserted 逻辑表:当向表中插入数据时,触发INSERT触发器,新的记录插入到触发器表和inserted表中。

       deleted逻辑表:当从表中删除记录时,触发DELETE触发器,被删除的记录存放到deleted逻辑表中。           

 

触发器的创建:

格式:create trigger trigger_name

          On{tableview}//指定操作对象

          [With encryption]//加密

{

{{for |after|instead of}{[delete][,][insert][,][update]}//指定激活类型

[ WITH APPEND ]   

 [ NOT FOR REPLICATION ] /*触发器不作为 SQL Server 复制的一部分发布 */

 As

Sql_statement

}

}

5:创建一个表table1,其中只有一列a。在表上创建一个触发器,每次插入操作时,将变量@str的值设为“Trigger is working”并显示。

Create table table1(a int)

Go

Create trigger table1_insert

   On table1 after insert

 As

Begin

Declare @str char(50)

Set @str=’ Trigger is working’

Print @str

end

6: XS表上创建一触发器,若删除学生信息,则同时删除该学生的选课信息。

CREATE TRIGGER delete_trig  ON  XS  FOR delete

AS

GEGIN

                     delete xs_kc  where 学号  in  (select 学号 from deleted)

END

GO

修改触发器:

格式:ALTER TRIGGER trigger_name ON ( table | view )

7:修改XSCJ数据库中在XS表上定义的触发器reminder

Use XSCJ

Alter trigger reminder on XS

  For update

  As raiserror(“执行的操作是修改16,10)

Go

删除触发器:

语法格式:

DROP TRIGGER { trigger_name } [ ,...n ]//n表示可以执行多个触发器

8:删除触发器reminder

USE XSCJ

IF EXISTS (SELECT name FROM sysobjects

      WHERE name = 'reminder' AND type = 'TR')

   DROP TRIGGER reminder

GO

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值