第6章 习题解答
1.思考题
(1)什么是存储过程?为什么要使用存储过程?
答:存储过程是SQL Server服务器中一组(预编译)的T-SQL语句的集合,是存储在数据库中的程序,这些程序是用来完成对数据库的指定操作。存储过程具有如下优点:
1) 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2) 当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而使用存储过程,只需要连接一次数据库就可以了。
3) 存储过程可以重复使用,可减少数据库开发人员的工作量。
4) 安全性高,可设定只有某此用户才具有对指定存储过程的使用权。
(2)系统存储过程和自定义存储过程有何区别?
答:最简单的区别就是系统存储过程是系统自带的,用户不可更改删除;而自定义的存储过程是用户自己编辑的。在自定义存储过程中可以调用系统存储过程。
(3)当某个表被删除后,该表上的所有触发器是否还存在?为什么?
答:因为触发器(trigger)是SQL Server数据库中一种特殊类型的存储过程,不能由用户直接调用,而且可以包含复杂的T-SQL语句。
触发器是为表上的更新、插入、删除操作定义的,也就是说当表上发生更新、插入或删除操作时触发器将执行。所以,当某个表被删除后,该表上的所有触发器将自动被删除。触发器主要用于强制复杂的业务规则或要求。
(4)存储过程和触发器有什么区别?什么时候用存储过程?什么时候用触发器?
答:存储过程和触发器,它们都是独立的数据库对象和存储在数据库上的特殊的程序。
存储过程由用户调用,完成指定的数据处理任务;触发器则由特定的操作触发,从而自动完成相关的处理任务。
使用触发器可以实现更强的数据完整性方面的约束。
(5)要求创建一个存储过程myproc,查询指定班级中选修指定课程的学生人数,并将查询
结果通过参数返回。以下过程调用存储过程查询“材料科学0601”班中选修“C++程序设计基础”的学生人数:
CREATE PROCEDURE [myproc]
@classname VARCHAR(20), @cname VARCHAR(20), @count INT OUTPUT
AS
SELECT COUNT(*) FROM S_C_Info sc, st_info s, c_info c
WHERE c.c_no=sc.c_no AND s.st_id=sc.st_id AND
s.Cl_Name=@classname AND c.C_Name=@cname 
执行这个存储过程的语句段为:
DECLARE @count int 
EXEC myproc '材料科学0601','C++程序设计基础' , _______
print @count 
请问应在语句的下划线处填入什么内容?
答:因为题中要求将查询结果通过参数返回。所以应填写 @count OUTPUT
2.选择题
(1)(  C  )允许用户定义一组操作,这些操作通过对指定的表数据进行删除、插入和更新命令来执行或触发。
A.存储过程        B.视图          C.触发器        D.索引
(2)SQL Server为每个触发器创建了两个临时表,它们是(B    )。
A.Updated和Deleted            BInsertedDeleted
C.Inserted和Updated            D.Seleted和Inserted
(3)SQL Server中,存储过程由一组预先定义并被(  C  )的T-SQL语句组成。
A.编写            B.解释          C.编译            D.保存
(4)下列可以修改存储过程的名称的系统存储过程是(  D  )。
A.xp_spaceused      B.sp_depends        C.sp_help        Dsp_rename
(5)以下语句创建的触发器ABC是当对表T进行(  D  )操作时触发。
CREATE TRIGGER ABC
ON 表T 
FOR INSERT, UPDATE, DELETE
        AS  ……
A.只是修改        B.只是插入        C.只是删除        D.修改,插入,删除
(6)以下(  C  )不是存储过程的优点。
A.实现模块化编程,能被多个用户共享和重用
B.可以加快程序的运行速度
C.可以增加网络的流量
D.可以提高数据库的安全性
(7)以下(  A  )操作不是触发触发器的操作。
ASELECT            B.INSERT        C.DELETE        D.UPDATE
(8)下面关于触发器的描述,错误的是(  A  )。
A.触发器是一种特殊的存储过程,用户可以直接调用                            B.触发器表和deleted表没有共同记录
C.触发器可以用来定义比CHECK约束更复杂的规则                            D.删除触发器可以使用DROP TRIGGER命令,也可以使用对象资源管理器
(9)关于SQL Server中的存储过程,下列说法中正确的是( D  )。
A.不能有输入参数            B.没有返回值
C.可以自动被执行            D.可以按存储过程名称执行
(10)对于下面的存储过程:
CREATE PROCEDURE Mysp1 @p Int sql触发器的使用
      AS
    SELECT St_name, Age FROM Students WHERE Age=@p
调用这个存储过程查询年龄为20岁的学生的正确方法是(  B   )。
A.EXEC Mysp1 @p='20'            BEXEC Mysp1 @p=20
C.EXEC Mysp1='20'                D.EXEC Mysp1=20
                       
           
           
                           
               
                   
                   
                   
                   
                   
                           
                           
           
           
   
           
               

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。