简答题(共10题,每题2分)
1.“图书馆”数据库中有如下两个表:
读者 ( 读者号int,读者名char(8),备注char(100))
借阅(书号char(20),读者号 int, 借出时间datetime, 归还时间datetime ).
1) 如果更改了“读者.读者号”,我们希望同时更改“借阅.读者号”
2) 如果“读者.读者号”被删除,则需要同时删除他的借阅记录。
试在“读者”数据表上创建实现这两个要求的触发器。
解:
对于1)创建一个该号触发器 Create Trigger改号_触发 On读者 for Update As begin Update借阅Set借阅.学号=inserted.学号 From借阅 Where借阅.学号=deleted.学号 end | 对于2)创建一个删除触发器 Create trigger删号_触发 On读者 for Delete As Begin Delete From借阅Where借阅.学号=deleted.学号 end |
2.在“学生”数据库中的“学生情况”表上创建一个
“v_网络”视图,其内容只包含班级=‘05网络’班学生的 “姓名”列信息,试写出这个创建该视图的主要代码。
解:use学生;CREATE v_网络AS SELECT 姓名 From学生情况Where班级=05网络
3.写出向“学生”数据库的“学生情况”表结构中添加“电子邮箱”和“密码”两列的T-SQL语言程序。
解:use 学生;alter table学生情况add电子邮箱varchar (100) null,密码varchar(20)
4.用T-SQL语言,在“学生”数据库上,创建一个自定义过程“P1”,按“学号”从大到小顺序排列“学生情况”表上的“计算机”系-“05应用”班的学生记录,然后写出调用该过程查询“学生情况”表的程序。
1)定义存储过程
IF EXISTS ( SELECT name FROM sysobjects WHERE name='P1'and type= 'p')
DROP PROCEDURE P1
go
create PROCEDURE P1 as
select * from学生情况where系别='计算机' and 班级='05应用'
order by学号desc
go
2)调用上述过程用过程查询“学生情况”表
Execute P1
5.用T-SQL语言,在“学生成绩”基表上创建一个“成绩_vw”视图(姓名,语文,数学,英语,总分),要求先按数学成绩降序,再按英语成绩降序排列记录。
解:
Createview成绩_vw SELECT TOP 100 PERCENT姓名,语文,数学,英语,总分
FROM dbo.学生成绩ORDER BY数学DESC,英语DESC
6.为学生数据库创建一个函数,其中包含唯一的参数,如果检测到某个数据是空值,就将它赋值为128。将fn1这个函数,用到’“学生情况”表的“学分”列,修改学分值。
解:(1)创建自定义函数fn1(x)
use学生
go
create function fn1(@x tinyint )
returns tinyint
begin
if @x is null
set @x=128
return @x
end
(2)调用函数修改“学生成绩”表中的“学分”列
use学生
update学生情况
set学分= fn1(学分)
7.分别写出在“学生”数据的“学生情况”表创建时和创建后,使用设置“学号”列为聚集型主键约束的T-SQL主要语句。
/*在创建表的同时创建主键约束*/ Use学生 CREATE TABLE 学生情况 ( …….., /*创建列定义*/ 学号char (10) Constraint pk_学号primary key clustered , ……….) | /*在创建表的以后创建主键约束*/ Use学生 ALTER TABLE 学生情况 ADD Constraint pk_学号primary key clustered(学号) /*注意’学号’书写位置的差别*/ |
8.用T-SQL语言为学生数据库创建一个0≤成绩≤100的规则,然后把它绑定到“学生成绩”表的“平时”、“期中”、“期末”和“平均”成绩列上。
解:1)创建规则
use学生
go
create rule成绩_规则as @成绩>=0 and @成绩<=100
2)绑定规则
use学生
go
EXEC sp_bindrule '成绩_规则', '学生成绩.平时'
EXEC sp_bindrule '成绩_规则', '学生成绩.期中'
EXEC sp_bindrule '成绩_规则', '学生成绩.期末'
EXEC sp_bindrule '成绩_规则', '学生成绩.平均'
9.假定“学生”数据库的“学生档案”表结构中,“备注”列的数据类型是nchar(50),试写出将其修改为varchar(100) T-SQL程序的主要语句。
解:use学生
alter table学生情况
alter column备注varchar (50)
10 “黄海公司”数据库有数据表:职工(职工号,职工姓名,公司名称,工资),试用SQL语句写出操作,将所有在‘华联公司’工作的职工加薪5%。
解: use 黄海公司
update职工
set工资=工资*1.05
where 公司名称=’华联公司’