原文筆記
2025-2026-2 计科数据库系统期末
考试科目: 数据库系统 本卷为: 闭卷 本卷为: A 卷 印数: 110 出题院系: 计算机学院 出题日期: 2026 年 4 月 20 日
| 题号 | 一 | 二 | 三 | 四 | 五 | 六 |
|---|---|---|---|---|---|---|
| 得分 |
一、选择题(1 分/题 * 15 题 = 15 分)
- 数据库(DB)、数据库管理系统(DBMS)和数据库系统(DBS)三者之间的关系是( )
A. DB 包含 DBMS 和 DBS
B. DBS 包含 DB 和 DBMS
C. DBMS 包含 DB 和 DBS
D. DBS 就是 DBMS - 数据独立性是指( )
A. 数据之间相互独立
B. 应用程序与数据库的数据结构相互独立
C. 数据存储与数据逻辑相互独立
D. 数据与操作系统相互独立 - 关系数据库中,元组对应传统文件中的( )
A. 记录
B. 字段
C. 文件
D. 数据项 - 关系代数中,从关系中取出满足条件的元组的操作称为( )
A. 投影
B. 选择
C. 连接
D. 除 - SQL 语言中,用于删除表结构的命令是( )
A. DELETE
B. DROP
C. CLEAR
D. REMOVE - 视图创建完成后,数据字典中存放的是( )
A. 查询语句
B. 查询结果
C. 视图所包含的数据
D. 视图所依赖的基本表 - 数据库触发器的主要作用是( )。
A. 优化查询执行计划
B. 提高数据插入速度
C. 实现用户权限管理
D. 自动维护数据完整性规则 - 将 E-R 图转换为关系模型,属于数据库设计的( )
A. 需求分析
B. 概念设计
C. 逻辑设计
D. 物理设计 - 若一个关系模式 R 属于 1NF,且它的每一个非主属性都完全函数依赖于主键,则 R 属于( )
A. 1NF
B. 2NF
C. 3NF
D. BCNF - 在数据库中,关于游标的描述,错误的是( )
A. 游标可以对查询结果集进行逐行处理
B. 使用游标通常需要经历声明、打开、读取、关闭、释放几个步骤
C. 游标常用于存储过程中处理复杂的逐行逻辑
D. 游标能提高大数据量批量操作的执行效率 - 数据库中,数据的正确性、有效性和相容性称为( )
A. 安全性
B. 完整性
C. 并发控制
D. 恢复 - 事务的原子性是指( )
A. 事务要么全做,要么全不做
B. 事务执行后数据库永远一致
C. 事务之间相互隔离
D. 事务提交后结果永久有效 - 数据库中,“读脏数据”是由( )引起的
A. 事务未提交就被其他事务读取
B. 不可重复读
C. 幻影读
D. 死锁 - 解决并发操作带来的数据不一致问题,普遍采用( )
A. 封锁机制
B. 存取控制
C. 日志文件
D. 备份恢复 - 在关系代数优化中,下列策略不正确的是( )
A. 尽可能早地执行选择运算
B. 尽可能早地执行投影运算
C. 把选择与笛卡尔积结合转换为等值连接
D. 先做笛卡尔积,再做选择运算
二、填空题(2 分/空 * 10 空 = 20 分)
- 建立冗余数据的方式有 __ 和 __。
- 数据转储的方法有 __ 和 __。
- 查询优化包含两类,有 __ 和 __*。
- 游标是系统为用户开设的一个 __,用来存放 SQL 语句的 __。
- 数据库工作单元与源程序工作单元之间的通信方式有 __、__ 和游标。
三、简答题(5 分/题 * 3 题 = 15 分)
- 将 1NF 的函数关系逐步分解为 BCNF,说明每一步消除了什么类型的函数依赖。
- 解释共享锁和排他锁的含义,并给出其相容矩阵。
- 简述数据库故障的主要分类及各类故障的成因与恢复方式。
四、关系代数及 SQL 语句(4 分/题 * 5 题 = 20 分)
有如下三个关系:
供应商表 Supplier(供应商编号 Sno,供应商名称 Sname,所在城市 City)
零件表 Part(零件编号 Pno,零件名称 Pname,零件规格 Spec)
供应表 Supply(供应商编号 Sno,零件编号 Pno,供应数量 Qty)
写出下列两个问题的关系代数表达式:
- 查询所有位于“西安”的供应商名称和供应商编号。
- 查询供应了 P1 零件的供应商名称、所在城市及供应数量。
用 SQL 语句回答下列三个问题:
- 查询供应商 S1 供应的零件总数(统计字段命名为 Total_Qty)。
- 查询供应数量大于 100 的 P2 零件的供应商名称、零件规格及供应数量。
- 查询没有供应零件 P3 的供应商信息。
五、数据库设计(共 20 分)
某高校拟开发教学管理信息系统,用于管理学生、专业、课程、教师、学院等核心业务对象,系统需满足以下业务需求:
- 学生与专业:每个学生主修一个专业,一个专业可招收多名学生;学生需选修多门课程,每门课程可被多名学生选修,需记录学生每门课程的选修成绩。
- 专业与学院:每个学院可设置多个专业,每个专业仅隶属于一个学院。
- 课程与学院:每门课程由一个学院开设,一个学院可开设多门课程。
- 课程与教师:一门课程可由多名教师讲授,一名教师可讲授多门课程,需记录每门课程的授课教室与课时信息。
- 教师与学院:每名教师隶属于一个学院,一个学院可拥有多名教师。
题目:
- 请根据上述业务需求,完成该系统的概念结构设计,绘制对应的 E-R 图,要求标注所有实体型、联系型;标注每个联系的类型(1:1、1:n、m:n);标注联系的属性(如成绩、教室、课时)。(6 分)
- 请将该 ER 图转换为关系数据库的关系模式,要求标注每个关系模式的主键和外键。(7 分)
- 指出上述关系模式分别为第几范式,为什么。(7 分)
六、SQL 编程(共 10 分)
假设存在一个员工信息表 Employees(emp_id, emp_name, dept_id, salary),请编写一个 SQL 存储过程,要求如下:
存储过程名称:proc_get_employee_name;
输入参数:in_emp_id INT(员工 ID);
输出参数:out_emp_name VARCHAR(50)(员工姓名);
功能要求:
若输入的员工 ID 存在,将该员工的姓名赋值给输出参数;
若输入的员工 ID 不存在或为 NULL,输出参数赋值为“无此员工”。
数据库系统概论题目答案与解析
一、选择题(1 分/题 * 15 题 = 15 分)
1. 题目
数据库(DB)、数据库管理系统(DBMS)和数据库系统(DBS)三者之间的关系是( )
A. DB 包含 DBMS 和 DBS
B. DBS 包含 DB 和 DBMS
C. DBMS 包含 DB 和 DBS
D. DBS 就是 DBMS
答案:B
解析: 数据库系统 DBS 通常由数据库 DB、数据库管理系统 DBMS、应用程序和数据库管理员等组成。因此 DBS 包含 DB 和 DBMS。
2. 题目
数据独立性是指( )
A. 数据之间相互独立
B. 应用程序与数据库的数据结构相互独立
C. 数据存储与数据逻辑相互独立
D. 数据与操作系统相互独立
答案:B
解析: 数据独立性是指应用程序与数据库中数据的逻辑结构、物理存储结构之间具有相对独立性。教材口径中包括逻辑独立性和物理独立性。
3. 题目
关系数据库中,元组对应传统文件中的( )
A. 记录
B. 字段
C. 文件
D. 数据项
答案:A
解析: 关系中的一个元组对应传统文件中的一条记录;属性对应字段。
4. 题目
关系代数中,从关系中取出满足条件的元组的操作称为( )
A. 投影
B. 选择
C. 连接
D. 除
答案:B
解析: 选择运算是从关系中选出满足给定条件的元组,记作 。
5. 题目
SQL 语言中,用于删除表结构的命令是( )
A. DELETE
B. DROP
C. CLEAR
D. REMOVE
答案:B
解析: DROP TABLE 用于删除基本表的定义及其数据;DELETE 只删除表中的数据,不删除表结构。
6. 题目
视图创建完成后,数据字典中存放的是( )
A. 查询语句
B. 查询结果
C. 视图所包含的数据
D. 视图所依赖的基本表
答案:A
解析: 视图是虚表。数据库中只保存视图的定义,即查询语句,不保存视图对应的查询结果。
7. 题目
数据库触发器的主要作用是( )。
A. 优化查询执行计划
B. 提高数据插入速度
C. 实现用户权限管理
D. 自动维护数据完整性规则
答案:D
解析: 触发器可在插入、删除、修改数据时自动执行,常用于实现复杂的完整性约束和业务规则。
8. 题目
将 E-R 图转换为关系模型,属于数据库设计的( )
A. 需求分析
B. 概念设计
C. 逻辑设计
D. 物理设计
答案:C
解析: E-R 图属于概念结构设计成果,将 E-R 图转换为关系模式属于逻辑结构设计。
9. 题目
若一个关系模式 R 属于 1NF,且它的每一个非主属性都完全函数依赖于主键,则 R 属于( )
A. 1NF
B. 2NF
C. 3NF
D. BCNF
答案:B
解析: 2NF 的要求是在 1NF 基础上,每一个非主属性都完全函数依赖于任何一个候选码,消除非主属性对码的部分函数依赖。
10. 题目
在数据库中,关于游标的描述,错误的是( )
A. 游标可以对查询结果集进行逐行处理
B. 使用游标通常需要经历声明、打开、读取、关闭、释放几个步骤
C. 游标常用于存储过程中处理复杂的逐行逻辑
D. 游标能提高大数据量批量操作的执行效率
答案:D
解析: 游标适合逐行处理复杂逻辑,但通常效率低于集合操作。大数据量批量操作一般不应优先使用游标。
11. 题目
数据库中,数据的正确性、有效性和相容性称为( )
A. 安全性
B. 完整性
C. 并发控制
D. 恢复
答案:B
解析: 数据库完整性是指数据的正确性、有效性和相容性。
12. 题目
事务的原子性是指( )
A. 事务要么全做,要么全不做
B. 事务执行后数据库永远一致
C. 事务之间相互隔离
D. 事务提交后结果永久有效
答案:A
解析: 原子性要求事务中的操作要么全部完成,要么全部不做。
13. 题目
数据库中,“读脏数据”是由( )引起的
A. 事务未提交就被其他事务读取
B. 不可重复读
C. 幻影读
D. 死锁
答案:A
解析: 读脏数据是指一个事务读取了另一个事务尚未提交的数据。
14. 题目
解决并发操作带来的数据不一致问题,普遍采用( )
A. 封锁机制
B. 存取控制
C. 日志文件
D. 备份恢复
答案:A
解析: 并发控制中普遍采用封锁机制来保证事务调度的正确性,防止数据不一致。
15. 题目
在关系代数优化中,下列策略不正确的是( )
A. 尽可能早地执行选择运算
B. 尽可能早地执行投影运算
C. 把选择与笛卡尔积结合转换为等值连接
D. 先做笛卡尔积,再做选择运算
答案:D
解析: 关系代数优化通常应尽早执行选择和投影,减少中间结果规模。先做笛卡尔积会产生大量无用中间结果,因此不正确。
二、填空题(2 分/空 * 10 空 = 20 分)
1. 题目
建立冗余数据的方式有 **__** 和 **__**。
答案: 数据转储;登记日志文件
解析: 数据库恢复的基本原理是利用冗余数据。建立冗余数据最常用的技术是数据转储和登记日志文件。
2. 题目
数据转储的方法有 **__** 和 **__**。
答案: 静态转储;动态转储
解析: 按转储期间是否允许事务运行,可分为静态转储和动态转储。补充:若按转储范围划分,也可分为海量转储和增量转储。
3. 题目
查询优化包含两类,有 **__** 和 **__**。
答案: 代数优化;物理优化
解析: 查询优化通常包括代数优化和物理优化。代数优化主要改变查询语句中操作的次序和组合;物理优化主要选择合适的存取路径和执行算法。
4. 题目
游标是系统为用户开设的一个 **__**,用来存放 SQL 语句的 **__**。
答案: 数据缓冲区;执行结果
解析: 游标用于处理 SQL 查询结果集。它相当于系统为用户开设的数据缓冲区,用来存放 SQL 语句的执行结果。
5. 题目
数据库工作单元与源程序工作单元之间的通信方式有 **__**、**__** 和游标。
答案: SQL 通信区;主变量
解析: 嵌入式 SQL 中,数据库工作单元和源程序工作单元之间主要通过 SQL 通信区、主变量和游标进行通信。
三、简答题(5 分/题 * 3 题 = 15 分)
1. 题目
将 1NF 的函数关系逐步分解为 BCNF,说明每一步消除了什么类型的函数依赖。
答案与解析:
从 1NF 到 BCNF 的规范化过程如下:
- 1NF → 2NF
要求: 在 1NF 的基础上,每一个非主属性都完全函数依赖于任何一个候选码。
消除的问题: 消除非主属性对码的部分函数依赖。
即若存在: ,且
其中 是候选码, 是非主属性,则说明 部分依赖于码,需要分解。 - 2NF → 3NF
要求: 在 2NF 的基础上,每一个非主属性都不传递依赖于候选码。
消除的问题: 消除非主属性对码的传递函数依赖。
即若存在: ,,且 不是候选码, 是非主属性
则有:
这种依赖属于传递依赖,需要分解。 - 3NF → BCNF
要求: 对于关系模式中的每一个非平凡函数依赖 , 必须包含候选码,即 必须是超码。
消除的问题: 消除所有决定因素不是候选码的函数依赖。
换句话说,BCNF 比 3NF 更严格,不仅要求非主属性不能部分依赖、传递依赖于码,还要求任何函数依赖的决定因素都必须是码。
2. 题目
解释共享锁和排他锁的含义,并给出其相容矩阵。
答案与解析:
- 共享锁,简称 S 锁
若事务 T 对数据对象 A 加上 S 锁,则事务 T 可以读取 A,但不能修改 A。
其他事务可以再对 A 加 S 锁,但不能对 A 加 X 锁。 - 排他锁,简称 X 锁
若事务 T 对数据对象 A 加上 X 锁,则事务 T 可以读取和修改 A。
其他事务不能再对 A 加 S 锁,也不能对 A 加 X 锁。 - 相容矩阵
| 已加锁 \ 申请锁 | S 锁 | X 锁 |
|---|---|---|
| S 锁 | 相容 | 不相容 |
| X 锁 | 不相容 | 不相容 |
解析: 共享锁之间相容,因为多个事务可以同时读同一个数据对象;排他锁与任何锁都不相容,因为修改数据时必须保证独占访问。
3. 题目
简述数据库故障的主要分类及各类故障的成因与恢复方式。
答案与解析:
数据库故障主要包括事务故障、系统故障、介质故障和计算机病毒等。
- 事务故障
成因: 某个事务在运行过程中因输入错误、运算溢出、违反完整性约束、死锁等原因不能继续执行。
恢复方式: 撤销该事务已经对数据库所做的修改,即执行 UNDO,使数据库恢复到事务开始前的状态。 - 系统故障
成因: 操作系统故障、DBMS 故障、停电、硬件瞬时故障等,导致系统停止运行,但磁盘数据一般没有破坏。
恢复方式: 系统重新启动后,根据日志文件:- 撤销故障发生时尚未提交的事务;
- 重做故障发生前已经提交但其结果可能尚未写入数据库的事务。
- 介质故障
成因: 磁盘损坏、磁头碰撞、强磁干扰等导致数据库或日志文件部分或全部丢失。
恢复方式: 利用最近一次数据转储副本恢复数据库,然后利用日志文件重做转储以后已经提交的事务。 - 计算机病毒
成因: 恶意程序破坏数据库文件或日志文件。
恢复方式: 先清除病毒,再利用备份副本和日志文件进行恢复。实际系统中还需要加强安全控制和备份管理。
四、关系代数及 SQL 语句(4 分/题 * 5 题 = 20 分)
已知关系:
供应商表 Supplier(供应商编号 Sno,供应商名称 Sname,所在城市 City)
零件表 Part(零件编号 Pno,零件名称 Pname,零件规格 Spec)
供应表 Supply(供应商编号 Sno,零件编号 Pno,供应数量 Qty)
1. 题目
查询所有位于“西安”的供应商名称和供应商编号。
答案:
关系代数表达式:
解析: 先用选择运算 选出 City 为“西安”的供应商,再用投影运算 取出供应商名称和供应商编号。
2. 题目
查询供应了 P1 零件的供应商名称、所在城市及供应数量。
答案:
关系代数表达式:
解析: 先将 Supplier 与 Supply 按供应商编号连接,再选择 Pno 为 P1 的元组,最后投影出供应商名称、所在城市和供应数量。
3. 题目
查询供应商 S1 供应的零件总数(统计字段命名为 Total_Qty)。
答案:
SQL Server 语句:
SELECT ISNULL(SUM(Qty), 0) AS Total_Qty
FROM Supply
WHERE Sno = 'S1';
解析: SUM(Qty) 用于统计供应数量总和。使用 ISNULL 是为了避免 S1 没有供应记录时返回 NULL。
4. 题目
查询供应数量大于 100 的 P2 零件的供应商名称、零件规格及供应数量。
答案:
SQL Server 语句:
SELECT
s.Sname,
p.Spec,
sp.Qty
FROM Supplier AS s
JOIN Supply AS sp
ON s.Sno = sp.Sno
JOIN Part AS p
ON sp.Pno = p.Pno
WHERE sp.Pno = 'P2'
AND sp.Qty > 100;
解析: 该查询需要同时使用供应商表、零件表和供应表。通过 Sno 连接供应商和供应关系,通过 Pno 连接零件和供应关系。
5. 题目
查询没有供应零件 P3 的供应商信息。
答案:
SQL Server 语句:
SELECT
s.Sno,
s.Sname,
s.City
FROM Supplier AS s
WHERE NOT EXISTS (
SELECT 1
FROM Supply AS sp
WHERE sp.Sno = s.Sno
AND sp.Pno = 'P3'
);
解析: NOT EXISTS 表示不存在对应记录。该语句查询在 Supply 表中不存在供应 P3 记录的供应商。
五、数据库设计(共 20 分)
题目背景:
某高校拟开发教学管理信息系统,用于管理学生、专业、课程、教师、学院等核心业务对象,系统需满足以下业务需求:
- 学生与专业:每个学生主修一个专业,一个专业可招收多名学生;学生需选修多门课程,每门课程可被多名学生选修,需记录学生每门课程的选修成绩。
- 专业与学院:每个学院可设置多个专业,每个专业仅隶属于一个学院。
- 课程与学院:每门课程由一个学院开设,一个学院可开设多门课程。
- 课程与教师:一门课程可由多名教师讲授,一名教师可讲授多门课程,需记录每门课程的授课教室与课时信息。
- 教师与学院:每名教师隶属于一个学院,一个学院可拥有多名教师。
1. 题目
请根据上述业务需求,完成该系统的概念结构设计,绘制对应的 E-R 图,要求标注所有实体型、联系型;标注每个联系的类型(1:1、1:n、m:n);标注联系的属性(如成绩、教室、课时)。(6 分)
答案:
实体型:
- 学生:Student
- 专业:Major
- 课程:Course
- 教师:Teacher
- 学院:College
联系型:
- 学生 —— 主修 —— 专业
联系类型:n:1
含义:每个学生主修一个专业,一个专业可招收多名学生。 - 学生 —— 选修 —— 课程
联系类型:m:n
联系属性:成绩 Grade
含义:一个学生可选修多门课程,一门课程可被多名学生选修。 - 学院 —— 设置 —— 专业
联系类型:1:n
含义:一个学院可设置多个专业,一个专业只隶属于一个学院。 - 学院 —— 开设 —— 课程
联系类型:1:n
含义:一个学院可开设多门课程,一门课程只由一个学院开设。 - 学院 —— 拥有/隶属 —— 教师
联系类型:1:n
含义:一个学院可拥有多名教师,一名教师只隶属于一个学院。 - 教师 —— 讲授 —— 课程
联系类型:m:n
联系属性:教室 Classroom,课时 Hours
含义:一名教师可讲授多门课程,一门课程可由多名教师讲授。
E-R 图文字表示:
学院 College 1 —— 设置 —— n 专业 Major
专业 Major 1 —— 主修 —— n 学生 Student
学生 Student m —— 选修 —— n 课程 Course | 成绩 Grade
学院 College 1 —— 开设 —— n 课程 Course
学院 College 1 —— 拥有/隶属 —— n 教师 Teacher
教师 Teacher m —— 讲授 —— n 课程 Course | 教室 Classroom,课时 Hours
解析: E-R 图的核心是识别实体型和联系型。1:n 联系通常可以通过在 n 端加入外键实现;m:n 联系通常需要单独转换为一个关系模式。
2. 题目
请将该 ER 图转换为关系数据库的关系模式,要求标注每个关系模式的主键和外键。(7 分)
答案:
- 学院表 College
College( CollegeID, CollegeName )
主键: CollegeID
- 专业表 Major
Major( MajorID, MajorName, CollegeID )
主键: MajorID
外键: CollegeID REFERENCES College(CollegeID)
- 学生表 Student
Student( StudentID, StudentName, MajorID )
主键: StudentID
外键: MajorID REFERENCES Major(MajorID)
- 课程表 Course
Course( CourseID, CourseName, CollegeID )
主键: CourseID
外键: CollegeID REFERENCES College(CollegeID)
- 教师表 Teacher
Teacher( TeacherID, TeacherName, CollegeID )
主键: TeacherID
外键: CollegeID REFERENCES College(CollegeID)
- 选修表 SC
SC( StudentID, CourseID, Grade )
主键: (StudentID, CourseID)
外键: StudentID REFERENCES Student(StudentID)
外键: CourseID REFERENCES Course(CourseID)
- 授课表 Teaching
Teaching( TeacherID, CourseID, Classroom, Hours )
主键: (TeacherID, CourseID)
外键: TeacherID REFERENCES Teacher(TeacherID)
外键: CourseID REFERENCES Course(CourseID)
解析: 1:n 联系可以在 n 端加入外键,例如 Student 中加入 MajorID。 m:n 联系需要单独转换为关系模式,例如 SC 和 Teaching。 联系的属性应放入由该联系转换成的关系模式中,因此 Grade 放入 SC,Classroom 和 Hours 放入 Teaching。
3. 题目
指出上述关系模式分别为第几范式,为什么。(7 分)
答案:
在以下基本函数依赖假设下:
- CollegeID → CollegeName
- MajorID → MajorName, CollegeID
- StudentID → StudentName, MajorID
- CourseID → CourseName, CollegeID
- TeacherID → TeacherName, CollegeID
- (StudentID, CourseID) → Grade
- (TeacherID, CourseID) → Classroom, Hours
各关系模式范式如下:
- College(CollegeID, CollegeName)
范式:BCNF
原因: 其唯一非平凡函数依赖为 CollegeID → CollegeName,决定因素 CollegeID 是候选码。 - Major(MajorID, MajorName, CollegeID)
范式:BCNF
原因: MajorID 是主键,MajorName 和 CollegeID 都完全函数依赖于 MajorID,不存在部分依赖和传递依赖。 - Student(StudentID, StudentName, MajorID)
范式:BCNF
原因: StudentID 是主键,StudentName 和 MajorID 都完全函数依赖于 StudentID,且决定因素是候选码。 - Course(CourseID, CourseName, CollegeID)
范式:BCNF
原因: CourseID 是主键,CourseName 和 CollegeID 都完全函数依赖于 CourseID,不存在非主属性对码的部分依赖和传递依赖。 - Teacher(TeacherID, TeacherName, CollegeID)
范式:BCNF
原因: TeacherID 是主键,TeacherName 和 CollegeID 都完全函数依赖于 TeacherID,决定因素是候选码。 - SC(StudentID, CourseID, Grade)
范式:BCNF
原因: 主键为 (StudentID, CourseID),Grade 表示某学生选修某课程的成绩,完全函数依赖于整个主键:
Grade 不依赖于 StudentID 或 CourseID 的某一部分,因此不存在部分函数依赖,也不存在传递函数依赖。 - Teaching(TeacherID, CourseID, Classroom, Hours)
范式:BCNF
原因: 主键为 (TeacherID, CourseID),Classroom 和 Hours 表示某教师讲授某课程时的教室和课时信息,完全函数依赖于整个主键:
因此不存在部分依赖和传递依赖,且决定因素是候选码。
总结: 上述关系模式在属性原子性的基础上,非主属性均完全依赖于候选码,且不存在非主属性对候选码的传递依赖;进一步看,每个非平凡函数依赖的决定因素都是候选码,因此均可认为达到 BCNF。
六、SQL 编程(共 10 分)
题目
假设存在一个员工信息表 Employees(emp_id, emp_name, dept_id, salary),请编写一个 SQL 存储过程,要求如下:
存储过程名称:proc_get_employee_name;
输入参数:in_emp_id INT(员工 ID);
输出参数:out_emp_name VARCHAR(50)(员工姓名);
功能要求:
若输入的员工 ID 存在,将该员工的姓名赋值给输出参数;
若输入的员工 ID 不存在或为 NULL,输出参数赋值为“无此员工”。
答案:
SQL Server 存储过程:
IF OBJECT_ID(N'dbo.proc_get_employee_name', N'P') IS NOT NULL
BEGIN
DROP PROCEDURE dbo.proc_get_employee_name;
END;
GO
CREATE PROCEDURE dbo.proc_get_employee_name
@in_emp_id INT,
@out_emp_name VARCHAR(50) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
IF @in_emp_id IS NULL
OR NOT EXISTS (
SELECT 1
FROM dbo.Employees
WHERE emp_id = @in_emp_id
)
BEGIN
SET @out_emp_name = '无此员工';
RETURN;
END;
SELECT @out_emp_name = emp_name
FROM dbo.Employees
WHERE emp_id = @in_emp_id;
END;
GO
解析:
- IF OBJECT_ID(...) IS NOT NULL 用于判断存储过程是否已经存在,若存在则先删除,避免重复创建时报错。
- @in_emp_id 是输入参数,@out_emp_name 是输出参数。
- 如果 @in_emp_id 为 NULL,或者 Employees 表中不存在该员工编号,则将输出参数赋值为“无此员工”。
- 如果员工存在,则通过 SELECT @out_emp_name = emp_name 将员工姓名赋值给输出参数。
调用示例:
DECLARE @name VARCHAR(50);
EXEC dbo.proc_get_employee_name
@in_emp_id = 1,
@out_emp_name = @name OUTPUT;
SELECT @name AS emp_name;