第8章 数据库习题参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第8章习题参考答案
1. 简要回答下列问题
⑴什么是存储过程?请分别写出使用对象资源管理器和SQL语句创建存储过程的主要步骤。
答:
存储过程:将一些T-SQL语句打包成一个数据库对象并存储在SQL Server服务器上,等到需要时,就调用这些T-SQL语句包。
--使用对象资源管理器创建存储过程的主要步骤:
①单击“开始”,选择“程序”→“Microsoft SQL Server 2005”→“SQL Server Management Studio”→“对象资源管理器”
②分别展开“数据库”→用户数据库“student”→可编程性→存储过程。
③右击“存储过程”项,在弹出的菜单中选择“新建存储过程”选项,打开“SQL 编辑器”存储过程模板文件
④在“SQL编辑器”存储过程模板文件中的相应位置填入存储过程的正文内容。
⑤单击“SQL编辑器”工具栏上的“分析”按钮,检查语法是否正确。
⑥单击“SQL编辑器”工具栏的“执行”按钮,创建这一存储过程。
⑦单击标准工具栏上的保存按钮,保存所创建存储过程的SQL代码。
--使用T-SQL语句创建存储过程的主要步骤:
①创建不带参数的存储过程的命令格式:
CREATE PROC[EDURE] procedure_name
AS sql_statements
②创建带参数的存储过程的命令格式:
CREATE PROC[EDURE] procedure_name
[{@parameter data_type}[=DEFAULT][OUTPUT]…….
[WITH {RECOMPILE | ENCRYPTION|RECOMPILE, ENCRYPTION}]
AS sql_statements
⑵如何将数据传递到一个存储过程中?又如何将存储过程的结果值返回?
答:
可以通过创建带参数的存储过程将数据传递到一个存储过程中;
通过OUTPUT关键字,在定义存储过程的变量后面加上OUTPUT,且在调用存储过程时也需在参数后面加上OUTPUT关键字以输出存储过程的结果值。
⑶同删除和重建存储过程相比,修改存储过程有什么好处?请分别写出使用对象资源管理器和SQL语句修改存储过程的主要步骤。
答:
①与删除和重建过程相比,修改存储过程不会失去许可和关联信息。
②使用对象资源管理器修改存储过程的主要步骤:
A、开始→程序→Microsoft SQL Server 2005→SQL Server Management Studio→对象资源管理器;
B、数据库→用户数据库“student”→可编程性→存储过程;
C、右击存储过程→修改;
D、在SQL编辑器中编辑存储过程的参数与T-SQL语句;
E、在SQL编辑器工具栏中选“执行”,创建这一存储过程;
F、单击“保存”。
③使用SQL语句修改存储过程的主要步骤:
ALTER PROC[EDURE] procedure_name
[{@parameter data_type}[=DEFAULT][OUTPUT]][ ,…..n]
[WITH{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYTION}]
AS
sql_statement[,….n]
⑷写出删除存储过程stud_info_proc的语句。
答:
DROP PROCEDURE stud_info_proc
⑸什么是触发器?SQL Server有什么不同类型的触发器?
答:
触发器是一种特殊类型的存储过程,它被捆绑到数据表或者视图上,换言之,触发器是一种在数据表或视图被修改时自动执行的内嵌存储过程,主要是通过事件进行触发的,而存储过程可以通过存储过程名字被直接调用。
在SQL Server中,有INSERT触发器;UPDATE触发器;DELETE触发器。当数据表中的数据被INSERT、UPDATE、DELETE时,SQL Server自动执行触发器,使用触发器可以实施更为复杂的数据完整性约束。
⑹当一个表同时具有约束和触发器时,如何执行?
答:
要先看约束条件是什么,如果约束条件成立,则先执行约束,约束条件成立后,则不再运行触发器。所以,当一个表同时具有约束和触发器时,一般先执行约束,触发器暂不执行。
⑺举个实例,分别创建INSERT、UPDATE、DELETE触发器。
答:
A. 在数据库student的表teacher_info上创建一个teacher_trigger1触发器,当执行inser 操作时该触发器被触发。
USE student
GO
CREATE TRIGGER teacher_trigger1
ON teacher_info
FOR INSERT
AS
raiserror('unauthorized',10,1)
B. 在数据库student的表teacher_info上建立一个名为teacher_trigger3的触发器,改触发器将被update所触活,该触发器不允许用户修改表的name列。
USE student
GO
CREATE TRIGGER teacher_trigger3
ON teacher_info
FOR UPDATE
AS
IF update(name)
BEGIN
Raiserror('unauthorized',10,1)
ROLLBACK TRANSACTION
END
C. 在数据库student的表teacher_info上建立一个名为teacher_trigger4的delect触发器。
USE student
GO
CREATE TRIGGER teacher_trigger4
ON teacher_info
FOR DELETE
AS
BEGIN
raiserror('你不能删除该行',10,1)
ROLLBACK TRANSACTION
END
⑻如果触发器执行ROLLBACK TRANSACTION语句后,引起触发器触发的操作语句是否还会有效?
答:不会。