Chinaunix首页 | 论坛 | 博客
  • 博客访问: 341233
  • 博文数量: 329
  • 博客积分: 2633
  • 博客等级: 少校
  • 技术积分: 3633
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-22 15:43
文章分类

全部博文(329)

文章存档

2013年(244)

2012年(46)

2011年(39)

我的朋友

分类: 数据库开发技术

2011-08-08 20:58:05

 

一个很好的入门ppt:

 sqlserver2005-创建存储过程和触发器.rar   

 

 

一、存储过程初学

1.打开新建查询的按钮,选择好数据库,输入以下代码执行:

 

CREATE PROCEDURE proc_person

AS

SELECT uuid, org_id

FROM TB_SUBJECT

GO

 

这样便会产生一个叫proc_person存储过程,这个作用就是选择uuidorg_id这两个字段.

用“exec proc_person”便可以执行这个存储过程

2.当再次在数据库树形栏上点击“可编程性”->“存储过程”->“修改”之后,便会出现以下代码:

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

go

 

ALTER PROCEDURE [dbo].[proc_person]

AS

SELECT uuid, org_id

FROM TB_SUBJECT

 

 

这说明alter是用来修改存储过程的,而create是第一次用的。如果在“set QUOTED_IDENTIFIER ON”后面加入“WITH ENCRYPTION”,这样创建的存储过程便不能看到自己的代码了。

 

3. DROP命令可以用来删除存储过程

用“drop procedure proc_person”即可完成删除

 

4. 【例子】创建一个存储过程,以简化对sc表的数据添加工作,使得在执行该存储过程时,其参数值(@Param1,@Param2,@Param3)作为数据添加到表中。(其数据类型为char(10) ,char(2) ,real

 

可以用:

CREATE  PROCEDURE  [dbo].[ pr1_sc_ins]

@Param1 char(10) , @Param2  char(2) , @Param3 real

AS

BEGIN

insert into sc(sno,cno,score)

values(@Param1,@Param2,@Param3)

END

 

当使用“EXEC  pr1_sc_ins  @Param1=3130040101,@Param2=c1, @Param3=85

即可执行以上的存储过程

 

 

二、触发器初学

1.触发器介绍

触发器是一种特殊的存储过程,它在执行语言事件时自动生效。

SQL Server2005 包括两大类触发器:DML 触发器和 DDL 触发器。常用DML.

   1DML 触发器在数据库中发生数据操作语言 DML 事件时将启用。DML 事件包括在指定表或视图中修改数据的 INSERT 语句、UPDATE 语句或 DELETE 语句。DML 触发器可以查询其他表,还可以包含复杂的 Transact-SQL 语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到错误,则整个事务即自动回滚。

   2DDL 触发器是 SQL Server 2005 的新增功能。当服务器或数据库中发生数据定义语言 DDL 事件时将调用这些触发器。

 

2.触发器的deleted inserted 逻辑表

    DML 触发器使用 deleted inserted 逻辑表。它们在结构上和触发器所在的表的结构相同,SQL Server 会自动创建和管理这些表。

可以使用这两个临时的驻留内存的表测试某些数据修改的效果及设置触发器操作的条件。Deleted表用于存储deleteupdate语句所影响的行的副本。在执行delete update 语句时,行从触发器表中删除,并传输到deleted表中。Inserted 表用于存储  Insert   update 语句所影响的行的副本,在一个插入或更新事务处理中,新建的行被同时添加到  Inserted  表和触发器表中。Inserted 表中的行是触发器表中新行的副本。

 

3.找到新建触发器的地方:

 

在表下面的

 

4.新建以下触发器:

 

CREATE TRIGGER sc_ins  ON  tb_subject

AFTER  INSERT

AS

BEGIN

DECLARE @bh char(5)--申请bh变量

Select @bh=Inserted.uuid from Inserted--Inserted临时表中拿到数据

If not exists(select uuid from tb_subjectdetail where tb_subjectdetail.uuid=@bh)

Delete tb_subject where uuid=@bh

END

 

 

 

这样便生成了一个叫做sc_ins的触发器。

再次打开之后便是alter

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

go

 

ALTER TRIGGER [sc_ins]  ON  [dbo].[TB_SUBJECT]

AFTER  INSERT

AS

BEGIN

DECLARE @bh char(5)--申请bh变量

Select @bh=Inserted.uuid from Inserted--Inserted临时表中拿到数据

If not exists(select uuid from tb_subjectdetail where tb_subjectdetail.uuid=@bh)

Delete tb_subject where uuid=@bh

END

 

如果要删除触发器的话,用“DROP TRIGGER sc_ins”即可

 

5.【举例】建立触发器( tr_del_s ),当删除表 s 中的记录时,自动删除表sc 中对应学号的记录。(可设变量@bh

程序清单如下:

CREATE TRIGGER tr_del_s ON s

AFTER DELETE AS

BEGIN

DECLARE @bh char(5)

SELECT @bh=deleted.sno from deleted   --deleted表中得到要删除的临时数据

DELETE sc where sno=@bh

END

 

6. INSTEAD OF触发器使SQL SERVER 执行触发器中的代码。而不是执行导致触发器激活的操作。

 

7. DDL 触发器会为响应多种数据定义语言 DDL 语句而激发。这些语句主要是以 CREATEALTER DROP 开头的语句。DDL 触发器可用于管理任务

例如:使用 DDL 触发器safety来防止数据库中的任一表被修改或删除。程序清单如下:

 CREATE  TRIGGER  safety

 ON DATABASE

 AFTER  DROP_TABLE, ALTER_TABLE

 AS

 PRINT 'You must disable Trigger "safety" to drop or alter tables!'

 ROLLBACK   

 

 

 

 

阅读(2015) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~