淮海工学院计算机工程学院
实验报告书
课程名: 《数据库原理及应用》
题 目: 存储过程和触发器
班 级: 软件132 学 号: 2013122907 姓 名: 孙莹莹
评语: 成绩: 指导教师: 批阅时间: 年 月 日 《 数据库原理及应用 》实验报告 - 1 –
一. 目的与要求
1.
2. 3. 4.
掌握存储过程的创建方法;
掌握存储过程的执行、修改和删除等操作; 掌握触发器的创建方法;
掌握触发器的使用、修改和删除等相关内容
二. 实验内容
基于前面建立的factory数据库,使用T-SQL语句完成如下各小题的功能:
1. 创建一个为worker表添加职工记录的存储过程Addworker; 2. 创建一个存储过程Delworker删除worker表中指定职工号的记录。 3. 显示存储过程Delworker; 4. 删除存储过程Addworker和Delworker.
三. 实验步骤
1 .
(1)建立存储过程 USE factory GO
CREATE PROCEDURE Addworker @no int=NULL,
@name char(10)=NULL, @sex char(2)=NULL,
@birthday datetime=NULL, @na char(2)=NULL, @wtime datetime=NULL, @depno int=NULL AS
IF @no IS NULL OR @name IS NULL OR @sex IS NULL OR @birthday IS NULL OR @depno IS NULL BEGIN
PRINT '请重新输入该职工信息!'
PRINT '你必须提供职工号、姓名、性别、出生日期、部门号' RETURN END
BEGIN TRANSACTION INSERT INTO worker
VALUES(@no,@name,@sex,@birthday,@na,@wtime,@depno) IF @@error<>0 BEGIN
ROLLBACK TRAN RETURN END
《 数据库原理及应用 》实验报告 - 2 –
COMMIT TRANSACTION
PRINT '职工'+@name+'的信息成功添加到表worker中' (2)验证存储过程 USE factory GO
Addworker 20,'陈立','女','55/03/08','否','75/10/10',4 GO
SELECT 职工号,姓名,性别,党员否 FROM worker GO 2.
(1)建立存储程序 USE factory GO
CREATE PROCEDURE Delworker @no int=NULL AS
IF @no IS NULL BEGIN
PRINT '必须输入职工号!' RETURN END
BEGIN TRANSACTION
DELETE FROM worker WHERE 职工号=@no IF @@error<>0 BEGIN
ROLLBACK TRAN RETURN END
COMMIT TRANSACTION
PRINT '成功删除职工号为'+CAST(@no AS CHAR(2))+'的职工记录' 执行下列语句,可验证存储过程的正确性: USE factory GO
Delworker 20 GO
SELECT 职工号,姓名,性别,党员否 FROM worker GO 3.
USE factory GO
EXEC sp_helptext Delworker GO 4.
USE factory GO
IF EXISTS (SELECT name FROM sysobjects
《 数据库原理及应用 》实验报告 - 3 –
WHERE name = 'Addworker' AND type ='P') DROP PROCEDURE Addworker GO
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'Delworker' AND type ='P') DROP PROCEDURE Delworker GO
5.建立触发器depart_update的程序如下: USE factory GO
IF EXISTS (SELECT name FROM sysobjects
WHERE type='TR' AND name='depart_update') DROP TRIGGER depart_update GO
CREATE TRIGGER depart_update ON depart AFTER UPDATE AS
DECLARE @olddepno int,@newdepno int SELECT @olddepno=部门号FROM deleted SELECT @newdepno=部门号FROM inserted UPDATE worker
SET 部门号=@newdepno WHERE 部门号=@olddepno GO
执行下列语句,可验证存储过程的正确性: USE factory GO
PRINT '将部门号改为' UPDATE depart SET 部门号=105 WHERE 部门号=101 GO
SELECT 职工号,姓名,部门号FROM worker GO
PRINT '将部门号改为' UPDATE depart SET 部门号=101 WHERE 部门号=105 GO
SELECT 职工号,姓名,部门号FROM worker GO
6.建立触发器worker_delete的程序如下:
USE factory GO
IF EXISTS (SELECT name FROM sysobjects
《 数据库原理及应用 》实验报告 - 4 –
WHERE type='TR' AND name='worker_delete') DROP TRIGGER worker_delete GO
CREATE TRIGGER worker_delete ON worker FOR DELETE AS
DECLARE @no int
SELECT @no=职工号FROM deleted DELETE FROM salary WHERE 职工号=@no GO
执行下列语句,可验证存储过程的正确性:
USE factory GO
PRINT '删除前的工资记录' SELECT * FROM salary GO
DELETE FROM worker WHERE 职工号=15 GO
PRINT '删除职工号为的职工记录后的工资记录' SELECT * FROM salary GO
7.删除触发器depart_update的程序如下:
USE factory GO
DROP TRIGGER depart_update GO
8.删除触发器worker_delete的程序如下:
USE factory GO
DROP TRIGGER worker_delete GO
四. 测试数据与实验结果
第1题图
第2题图