数据库实验6触发器实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
淮海工学院计算机工程学院实验报告书
课程名:《数据库原理及应用》
题目:存储过程和触发器
班级:软件132
学号: 2013122907
姓名:孙莹莹
一.目的与要求
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
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
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