《SQL SERVER 数据库应用》实验指导书-2015版 下载本文

分析一下此段程序执行时可能出现哪几种情况。 【思考与练习】

编写如下T-SQL程序:

(1) 自定义1个数据类型,用于描述YGGL数据库中的DepartmentlD字段,然后编写代码

重新定义数据库各表。

(2) 编写对YGGL各表进行插入、修改、删除操作的存储过程,然后,编写l段程序调用

这些存储过程。

(3)对于YGGL数据库,表Employees的EmployeelD列与表Salary的EmployeelD列应满足参照完整性规则,请用触发器实现两个表问的参照完整性。 4.创建触发器

对于YGGL数据库,表Employees的DepartmentID列与表Departments的DepartmentID列对应满足参照完整性规则,即:

(1) 向Employees表添加1条记录时,该记录的DepartmentID值在Departments

表中应存在。

(2) 修改Departments表DepartmentID 字段值时,该字段在Employees表中的对

应值也应修改。

(3) 删除Departments表中1条记录时,该记录DepartmentID字段值在Employees

表中对应的记录也应删除。

对于上述参照完整性规则,在此通过触发器实现。 在查询分析器编辑窗口输入各触发器的代码并执行: ①向Employees表插入或修改1条记录时,通过触发器检查记录的DepartmentID值在Departments表是否存在,若不存在,则取消插入或修改操作。 USE YGGL GO

CREATE TRIGGER EmployeesIns on dbo.Employees FOR INSRET AS BEGIN

IF((SELECT ins.departmentid from inserted ins)NOT IN (SELECT departmentid FROM departments)) ROLLBACK

/*对当前事务回滚,即恢复到插入前的状态 END

②修改Departments表departmentID字段值时,该字段在Employees表中的对应值也进行相应修改。 USE YGGL GO

CREATE TRIGGER DepartmentsUpdate on dbo.Departments FoR UPDATE AS BEGIN

IF(COLUMNS_UPDATED()&01)>0 UPDATE Employees

17

SET DepartmentlD=(SELECT ins.DepartmentlD from INSERTED ins) WHERE DepaxtmentlD=(SELECT DepartmentlD FROM deleted) END GO

③删除Departments表中1条记录的同时删除该记录departmentlD字段值在Employees表中对应的记录。 USE YGGL GO

CREATE TRIGGER DepartmentsDelete On db.Departments FOR DELETE AS BEGIN

DELETE FROM Employees

WHERE DepartmentlD=(SELECT DepartmentlD FROM deleted) END

GO

【思考与练习】

上述触发器的功能用完整性的方法完成。 【思考与练习】

编写如下T-SQL程序:

(1) 自定义1个数据类型,用于描述YGGL数据库中的DepartmentlD字段,然后编写

代码重新定义数据库各表。

(2) 对于YGGL数据库,表Employees的EmployeelD列与表Salary的EmployeelD列

应满足参照完整性规则,请用触发器实现两个表间的参照完整性。

18