命题教师 朱三元 院系负责人
孝 感 学 院 2011 — 2012学年度第 一 学期期末考核试卷 考核课程: 数据库应用技术 考核类型: 考查 考核形式: 开卷 学生所在院系: 计算机学院 年 级: 2009 试 卷:A
1. S ql Server 数据库文件的主文件的默认后缀名为( ) A ).ndf B ).mdf C ).ldf D ).idf
2. SQL SERVER 中下列说法错误的是( )。 A )每个数据文件中有且只有一个主数据文件 B )日志文件可以存在于任意文件组中 C )主数据文件默认为primary 文件组 D )文件组是为了更好地实现数据库文件组织
3. 在T-SQL 中,下列说法中正确的是( )。 A )局部变量可以不声明就使用 B )全部变量可以不声明就使用 C )所有变量都必须先声明后使用 D )局部变量先声明后使用,全局变量由系统提供,用户不能自己建立。
4. 针对由create table scores(sno varchar(10), cno varchar(10), score, primary key(sno,cno))所创建的表scores ,下列语句正确的是( )。 A )select sno, sum(score) from scores B )select *, sum(score) from scores C )select count(*), sum(score) from scores D )delete * from scores
5. 下列对索引的相关描述正确的是( ) A )经常被查询的列不适合建索引 B )列值唯一的列适合建索引 C )有很多重复值的列适合建索引 D )是主键或外键的列不适合建索引
6. Sql Server 采取的身份认证方式( ) A )仅有Windows 身份验证模式 B )仅有SQL Server 身份验证模式 C )设置一种后不能修改 D )有Windows 身份验证模式和SQL Server 身份验证模式
7. 在Sql Server 中,当数据库表数据被修改后,系统自动执行的数据库对象是( ) A )视图 B )函数 C )存储过程 D )触发器
8. 以下选项中不是访问数据库系统的接口的是( ) A )ODBC B )OLE DB C )API D )https://www.wendangku.net/doc/0a7164693.html,
9. 在SQL 语言中,如果要建立一个工资表包含职工号,姓名,职称。工资等字段。若要保证工资字段的取值不低于800元,最合适的实现方法是( ) A )在创建工资表时为“工资”字段建立缺省 B )在创建工资表时为“工资”字段建立检查约束 C )在工资表建立一个触发器
D )为工资表数据输入编写一个程序进行控制
10. 下列途径哪个不是实现值域完整性( )。
A ) rule
B ) primary key
C ) not null
D ) default
二、 问答题( 10分)
一、 选择题( 2*10=20分)
SQL Server中可更新视图的条件有哪些?
三、数据库应用题(36分)
1.(16分)写出创建产品销售数据库(数据库名为CPXS)和表的T-SQL语句:
数据库初始大小为10MB,最大大小为100MB, 数据库自动增长, 增长方式是按10%比例增长; 日志文件初始为2MB,最大可增长到10MB, 按1MB增长, 其余参数自定。数据库中包含的表如下:
产品表:产品编号,产品名称,价格,库存量;
销售商表:客户编号,客户名称,地区,负责人,电话
产品销售表:销售日期,产品编号,客户编号,数量,销售额
(注:要实现实体完整性和参照完整性)
2.(8分) 下面的程序段的功能是:在数据库中判断是否存在名为my_proc的存储过程,若存在,则删除之,然后创建同名的存储过程,该存储过程的功能是向book表的book_id, book_Name, price 和publisher字段插入数据,阅读并回答以下问题:
If _____________ (select name from sysobjects where name=’my_proc’ and xtype=’P’)
_________________
Go
Create procedure my_proc(
@book_ID int, @book_Name varchar(50), @price float @publisher varchar(50)
)
as
_______________________________________________________________________
问题:(1)在上述程序的空白处填写适当的内容。
(2)任写一条调用该存储过程的T-SQL语句:
_____________________________________________________________________
3.(6分)在一台计算机上创建的SQL Server数据库MyDB,现要将该数据库移到另外一台计算机上,请给出至少两种方法,并说明各种方法是操作步骤。
4. (6分)下面的代码是用游标实现统计某门课程中及格与不及格的学生人数,请在空格处填写适当的代码。
create procedure getCount(@kch varchar(10))
as begin
declare @cnt1 int ,@cnt2 int,@grade int
declare cur_count_stu cursor for select grade from cjb where kch=@kch set @cnt1=0
set @cnt2=0
fetch cur_count_stu into @grade
while
begin
if @grade>=60
set @cnt1=@cnt1 +1
else
set @cnt2=@cnt2 +1
end
close cur_count_stu
deallocate cur_count_stu
select @cnt1,@cnt2
end
1、(18分)设数据库表结构由下面语句创建:
create table post(
pid int identity(1,1) primary key, --帖子id
postTitle nvarchar(200), --帖子标题
postContent nvarchar(4000), --帖子内容
postTime datetime default getdate(),--帖子发布时间
authorID int, --帖子作者id
postTypeID int, --帖子栏目ID
count int --帖子点击数量)
(1)设计一个函数f_getReplyCnt计算某个主贴的回帖个数;
(2)设计一个存储过程,实现获取某一栏目帖子的分页数据,数据按发帖时间降序排列,输入参数:帖子栏目id、每页显示的记录数(默认为30)、要显示的页码;返回的内容包括:帖子id,帖子标题,发布时间,作者id,点击数, 回帖个数。
提示:使用函数row_Number() over(order by postTime desc),可以按发帖时间降序排列,并获得降序排列后的行号
2、(16分)设数据库中有一表“student”,(1)请设计一个以学号(字段名为sno,数据类型为varchar(6))为参数的存储过程deleteStudent,实现删除指定的学号的学生记录。
(2)用c#.net或VC++写出用上述存储过程执行删除学号为“001101”的学生的代码(主要代码)。
…//C#.Net中已知的代码如下SqlConnection conn=new SqlConnection(strCnn); conn.Open(); …// VC++中已知的代码如下
_variant_t vNULL;
vNULL.vt=VT_ERROR;
vNULL.scode=DISP_E_PARAMNOTFOUND; pConnection.CreateInstance(__uuidof(Connection)); pConnection.Open->(strCnn,””,””,NULL);
_CommandPtr pCmd=NULL;
四、程序设计题(34分)
create table reply(
rid int identity(1,1) primary key, --回帖id
content nvarchar(4000), --回帖内容
pID int references post(pid), --主贴id,
authorID int --回帖作者id
)