SQL Server 2005数据库实验四

实验名称:SQL Server2005 视图、存储过程、触发器的创建及使用

实验内容:在SQL Server 中完成视图的定义并在此基础上进行更新等操作;
在SQL Server 中完成视存储过程的设计、创建及执行等操作;
在SQL Server中创建DML触发器,并设置相关操作使之运行。
实验目的:掌握视图的定义并了解什么情况下视图修改可以成功,体会视图与表的异同之处;
理解和掌握存储过程的创建及调用方法;
理解和掌握触发器的创建方法,体会触发器的执行条件和作用。
实验方法:在SQL Server 环境下,通过SQL语句完成相应操作。

实验步骤及要求:
一.视图
使用 pc、product表相同的model属性进行关联, 建一个视图testview,包含maker,model,price三个属性。
1.   修改视图中的price的值,观察视图和pc表中相关的变化。
2.   修改视图中的model的值,观察视图、pc、product表中相关的变化。
3.   上一步中的修改完成的有问题,两个原始表(pc、product)的内容不是都修改了,为完成相应操作,请设计一个触发器,当对视图的model进行修改时,触发器自动完成pc、product的修改。

二.存储过程(创建及调用的sql语句)
1.查询成绩在x和y之间的学生信息。(x,y是两个输入参数,学生信息包括学号、姓名、年龄)
2.计算指定课程的及格率(输入参数:课程编号,输出参数:该课程的及格率。)

三.触发器
1.修改SC表中学生成绩时,成绩(grade)的增加幅度不能超过10%,超过该范围,取消操作,并给出错误提示。
2.删除一条学生信息(S表)时,如果该生信息已经存在于成绩SC表中,给出提示,不能删除。

实验4要求下载
实验4实验数据 (实验4数据没有后缀名,在数据库管理界面SQL SERVER MANAGEMENT STUDIO添加到数据库即可)

在视图上建立触发器

对视图建立触发器,SQL Server 2000提供了instead of 方法,可以对原触发行为进行改写。
这里以一个简单的例子来说明使用对视图建立触发器的方法:
1. 创建两个Table (假设id唯一)
    create table test1(id varchar(50), name varchar(50))
    create table test2(id varchar(50), name varchar(50))
2. 创建一个视图
    create view viewTest as
    select test1.id, test1.name as name1, test2.name as name2 from test1 inner join test2 on test1.id = test2.id
3. 创建insert触发器
    create trigger triggerInsertViewTest on viewTest
    instead of insert
    as  
    begin
         insert test1(id, name) select id, name1 from inserted
         insert test2(id, name) select id, name2 from inserted
    end
4. 创建update触发器
update操作实际上是先进行delete, 再进行insert操作。
    create trigger triggerUpdateViewTest on viewTest
    instead of update
    as
    if update(id)
    begin
         update test1 set test1.id = inserted.id from test1, inserted, deleted where test1.id = deleted.id
         update test2 set test2.id = inserted.id from test2, inserted, deleted where test2.id = deleted.id
    end
    if update(name1)
    begin
        update test1 set test1.name = inserted.name1 from test1, inserted where test1.id = inserted.id
    end
    if update(name2)
    begin
         update test2 set test2.name = inserted.name2 from test2, inserted where test2.id = inserted.id
    end
5. 创建delete触发器
    create trigger triggerDeleteViewTest on viewTest
    instead of delete
    as
    begin
         delete test1 from test1, deleted where test1.id = deleted.id
         delete test2 from test2, deleted where test2.id = deleted.id
    end

引用网址: 1

Delete语句语法

DELETE FROM table_name
WHERE 条件

Related Articles

Quote Of The Day