分析一下此段程序执行时可能出现哪几种情况。 【思考与练习】
编写如下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