SQLServer数据库实验——实验6 触发器设计

实验6 触发器设计

一、实验目的
1.能够理解触发器调用的机制。
2.能够使用SQL命令创建DML触发器。
3.能够完成触发器的修改、删除等管理任务。

二、实验要求
充分了解触发器设计的原理与过程。

三、实验内容
针对前面实验建立的SPJ数据库,做如下操作。
1. 创建触发器tri1,实现当修改项目表J中的数据时,显示提示信息“项目表信息修改成功!”

CREATE TRIGGER tri1
ON J AFTER UPDATE
AS
PRINT'项目表信息修改成功!'

2. 使用触发器tri2,实现当修改零件表P中某种零件的编号时,对应SPJ表中的零件编号也要修改。

CREATE TRIGGER tri2 ON P
AFTER UPDATE
	AS
BEGIN
		DECLARE @old_PNO char(4)
		DECLARE @new_PNO char(4)
		SELECT @old_PNO=PNO FROM deleted
		SELECT @new_PNO=PNO FROM inserted
		UPDATE SPJ SET PNO=@new_PNO WHERE PNO=@old_PNO
END
更新语句:
UPDATE P SET PNO='P20'WHERE PNO='P2'/*此处数据大家更改一下*/

3. 首先创建一个空的表S_del_copy,其表结构与供应商表S结构相同。 创建触发器tri3,当删除供应商表S中的一条记录时,自动将删除的记录保存到S_del_copy表中。

创建一个与S结构相同的空表
SELECT * INTO  S_del_copy 
FROM  S
   WHERE  1=2
创建触发器:
CREATE  TRIGGER  tri3
 ON  S   AFTER   DELETE
  AS
BEGIN
 --声明4个变量对应S中4个列
  DECLARE @var_sno char(4), @var_sname varchar(20)
  DECLARE @var_stauts char(4), @var_city  char(10)
   --将保存在Deleted临时表中的记录内容保存到相应的变量中
  SELECT  @var_sno =SNO, @var_sname =SNAME, 
           @var_stauts=STATUS, @var_city =CITY
  FROM Deleted;
   --往S_del_copy表中插入新记录
  INSERT S_del_copy(sno,sname,status,city)
   VALUES(@var_sno,@var_sname,@var_stauts,@var_city)
END
删除语句:
进行删除之前把S表的主键删除掉才能运行成功,不然会有主键限制
DELETE  FROM S WHERE SNO='S2'/*此处数据大家更改一下*/

4. 查看供应商表S中已经创建的触发器。

SELECT * 
FROM SYSOBJECTS
   	WHERE   XTYPE='TR' AND parent_obj=OBJECT_id('S')

5.查看已创建的触发器tri1的内容。

EXEC SP_HELPTEXT 'tri1'

6.删除项目表J上的触发器tri1。

DROP TRIGGER tri1

希望大家能够点点关注,点点赞啦!!!

你可能感兴趣的:(SQLServer数据库实验——实验6 触发器设计)