文章收藏-FAQ 位置:电脑学习网

MS-SQL SEREVER 测试题

一 SQLSERVER管理部分

1 请讲出身份验证模式与登录帐号的关系及如何用各种帐号进行登录,并画出示意图

2 请讲出登录帐号、数据库用户及数据库角色之间的关系,并画出示意图

3 请讲出数据库用户、数据库角色与数据库对象之间的关系,并画出直接对用户授权与间接对用户授权(系统权限与对象权限)的方法

4 请讲出服务器角色、数据库角色、标准角色与应用程序角色的区别与验证其权限的方法

5 请讲出数据库还原模型对数据库的影响

6 有一个执行关键任务的数据库,请设计一个数据库备份策略

7 请使用文件与文件组恢复的方式恢复数据库

8 请使用事务日志恢复数据库到一个时间点

9 请设计作业进行周期性的备份数据库

10 如何监控数据库的阻塞,并实现数据库的死锁测试

11 如何监控数据库的活动,并能使用索引优化向导生成索引

12 理解数据库框图的作用并可以设计表与表之间的关系

二 SQLSERVER的实现部分

1 有订单表,需要实现它的编号,格式如下:200211030001……200222039999等

2 有表T1,T2,现有一事务,在向表T1添加数据时,同时也必须向T2也添加数据,如何实现该事务

3 如何向T1中的编号字段(code varchar(20))添加一万条记录,不充许重复,规则如下:编号的数据必须从小写的a-z之间取值

4 如何删除表中的重复数据,请使用游标与分组的办法

5 如何求表中相邻的两条记录的某字段的值之差

6 如何统计数据库中所有用户表的数据,显示格式如下:

表名记录数

  sales23

7 如何删除数据库中的所有用户表(表与表之间有外键关系)

8 表A editor_id       lb2_id
   123           000
   123           003
   123           003
   456           007
   456           006
表B  lb2_id         lb2_name
    000           a
    003           b
    006           c
    007           d
显示 a   共1条 (表A内lb2_id为000的条数)
   b   共2条(表A内lb2_id为003的条数)

9 人员情况表(employee):里面有一字段文化程度(wh):包括四种情况(本科以上,大专,高中,初中以下),现在我要根据年龄字段查询统计出:表中文化程度为本科以上,大专,高中,初中以下,各有多少人,占总人数多少。

SELECT wh AS 学历,age as 年龄, Count(*) AS 人数,

     Count(*) * 100 /(SELECT Count(*) FROM employee) AS 百分比

FROM employee GROUP BY wh,age

学历年龄     人数百分比

本科以上  2034   14

大专2033   13

高中2033   13

初中以下  20100  40

本科以上  2150   20

10 现在有三个表student:(FID  学生号,FName  姓名),

subject:(FSubID   课程号,FSubName 课程名),

Score(FScoreId  成绩记录号,FSubID    课程号,FStdID    学生号,FScore    成绩)

怎么能实现这个表:

姓名   英语   数学   语文  历史

张萨   78     67     89    76

王强   89     67     84    96

SELECT a.FName AS 姓名,

英语 = SUM(CASE b.FSubName WHEN ’英语’ THEN c.FScore END),

数学 = SUM(CASE b.FSubName WHEN ’数学’ THEN c.FScore END),

语文 = SUM(CASE b.FSubName WHEN ’语文’ THEN c.FScore END),

历史 = SUM(CASE b.FSubName WHEN ’历史’ THEN c.FScore END)

FROM Student a, Subject b, Score c

WHERE a.FID = c.FStdId AND b.FSubID = c.FsubID GROUP BY a.FName

11 原始表的数据如下:

PID PTime     PNo

111111     2003-01-28 04:30:09

111111     2003-01-28 18:30:00

222222    2003-01-28 04:31:09

333333    2003-01-28 04:32:09

111111     2003-02-09 03:35:25

222222    2003-02-09 03:36:25

333333    2003-02-09 03:37:25

查询生成表

PDate  111111 222222     333333......

2003-01-28    04:30:09     04:31:0904:32:09     ......

2003-01-28    18:30:00

2003-02-09    03:35:25     03:36:2503:37:25     ......

12  表一(AAA)

商品名称mc  商品总量sl

  A  100

  B  120

表二(BBB)

商品名称mc  出库数量sl

   A  10

   A  20

   B  10

   B  20

   B  30

用一条SQL语句算出商品A,B目前还剩多少?



declare @AAA table (商品名称  varchar(10), 商品总量  int)

insert into @AAA values(’A’,100)

insert into @AAA values(’B’,120)

declare @BBB table (商品名称 varchar(10), 出库数量 int)

insert into @BBB values(’A’, 10)

insert into @BBB values(’A’, 20)

insert into @BBB values(’B’, 10)

insert into @BBB values(’B’, 20)

insert into @BBB values(’B’, 30)

select TA.商品名称,A-B AS 剩余数量 FROM

(select 商品名称,sum(商品总量) AS A

from @AAA

group by 商品名称)TA,

(select 商品名称,sum(出库数量) AS B

from @BBB

group by 商品名称)TB

where TA.商品名称=TB.商品名称



select 商品名称,sum(商品总量) 剩余数量 from (select * from @aaa union all select 商品名称,-出库数量 from @bbb) a group by 商品名称

13 优化这句SQL语句

UPDATE tblExlTempYear

SET tblExlTempYear.GDQC = tblExlTempMonth.GDQC

FROM tblExlTempYear,tblExlTempMonth

where tblExlTempMonth.GDXM=tblExlTempYear.GDXM and tblExlTempMonth.TXDZ=tblExlTempYear.TXDZ

(1)、加索引:

tblExlTempYear(GDXM,TXDZ)

tblExlTempMonth (GDXM,TXDZ)

(2)、删除无用数据

(3)、转移过时数据

(4)、加服务器内存,升级服务器

(5)、升级网络系统

UPDATE tblExlTempYear

SET tblExlTempYear.GDQC = tblExlTempMonth.GDQC

FROM tblExlTempYear (index indexY),tblExlTempMonth (index indexM)

where tblExlTempMonth.GDXM=tblExlTempYear.GDXM and tblExlTempMonth.TXDZ=tblExlTempYear.TXDZ

14 品种     日期     数量

P0001  2002-1-10  10

P0001  2002-1-10  11

P0001  2002-1-10  50

P0001  2002-1-12   9

P0001  2002-1-12   8

P0001  2002-1-12   7

P0002  2002-10-10   5

P0002  2002-10-10  7

P0002  2002-10-12  0.5

P0003  2002-10-10  5

P0003  2002-10-12  7

P0003  2002-10-12  9

结果要先按照品种汇总,再按照日期汇总,结果如下:

P0001   2002-1-10    71

P0001    2002-1-12   24

P0002    2002-10-10  12

P0002    2002-10-12  0.5

P0003    2002-10-10  5

P0003    2002-10-12  16

SQL SERVER能做出这样的汇总吗…

15 在分組查循中with{cube|rollup}的區別是什么?

如:

  use pangu

  select firm_id,p_id,sum(o_price_quantity)as sum_values

  from orders

  group by firm_id,p_id

  with cube

  與

  use pangu

  select firm_id,p_id,sum(o_price_quantity)as sum_values

  from orders

  group by firm_id,p_id

  with rollup

  的區別是什么?

CUBE 和 ROLLUP 之间的区别在于:

CUBE 生成的结果集显示了所选列中值的所有组合的聚合。

ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。

例如,简单表 Inventory 中包含:

Item   Color  Quantity

-------------------- -------------------- --------------------------

Table  Blue   124

Table  Red    223

Chair  Blue   101

Chair  Red    210

下列查询将生成小计报表:

SELECT CASE WHEN (GROUPING(Item) = 1) THEN ’ALL’

     ELSE ISNULL(Item, ’UNKNOWN’)

END AS Item,

CASE WHEN (GROUPING(Color) = 1) THEN ’ALL’

     ELSE ISNULL(Color, ’UNKNOWN’)

END AS Color,

SUM(Quantity) AS QtySum

FROM Inventory

GROUP BY Item, Color WITH ROLLUP

Item   Color  QtySum

-------------------- -------------------- --------------------------

Chair  Blue   101.00

Chair  Red    210.00

Chair  ALL    311.00

Table  Blue   124.00

Table  Red    223.00

Table  ALL    347.00

ALL    ALL    658.00

 (7 row(s) affected)

如果查询中的 ROLLUP 关键字更改为 CUBE,那么 CUBE 结果集与上述结果相同,只是在结果集的末尾还会返回下列两行:

ALL    Blue   225.00

ALL    Red    433.00

CUBE 操作为 Item 和 Color 中值的可能组合生成行。例如,CUBE 不仅报告与 Item 值 Chair 相组合的 Color 值的所有可能组合(Red、Blue 和 Red + Blue),而且报告与 Color 值 Red 相组合的 Item 值的所有可能组合(Chair、Table 和 Chair + Table)。对于 GROUP BY 子句中右边的列中的每个值,ROLLUP 操作并不报告左边一列(或左边各列)中值的所有可能组合。例如,ROLLUP 并不对每个 Color 值报告 Item 值的所有可能组合。ROLLUP 操作的结果集具有类似于 COMPUTE BY 所返回结果集的功能;然而,

ROLLUP 具有下列优点: ROLLUP 返回单个结果集;COMPUTE BY 返回多个结果集,而多个结果集会增加应用程序代码的复杂性。ROLLUP 可以在服务器游标中使用;COMPUTE BY 不可以。有时,查询优化器为 ROLLUP 生成的执行计划比为 COMPUTE BY 生成的更为高效。

16 假如我有两个表
表1(电话号码,是否存在)
表2(电话号码,是否拨打)
想查找表1中的电话号码是否在表2中存在,如果存在就更新表1中的是否存在字段为1。

    UPDATE 表1 SET 是否存在=1
WHERE EXISTS(SELECT * FROM 表2 WHERE 表2.电话号码 = 表1.电话号码)

17 用存储过程调用外部程序.
不过要做成com控件
用sp_OACreate存储过程)
DECLARE @object int
DECLARE @hr int
DECLARE @src varchar(255), @desc varchar(255)
EXEC @hr = sp_OACreate ’SQLDMO.SQLServer’, @object OUT
IF @hr 〈〉 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END

18 以下作业皆以*.sql文件存储于c:\homework目录中

实践1:创建和维护SQL Server数据库

(1)使用下表提供的值,创建数据库ClassNorthwind

参数   值

数据库名称   ClassNorthwind
数据库文件名 ClassNorthwind_Data
位置  C:\data
初始大小     25MB
文件组Primary
文件增长     1MB
最大文件长度 100MB
事务日志文件名称  ClassNorthwind_Log
位置C:\data
初始大小   15MB
文件增长   1MB
最大文件长度30MB

(2)使用sp_helpdb存储过程浏览有关数据库ClassNorthwind的信息

(3)修改数据库属性

     编写和执行将ClassNorthwind事务日志文件的最大文件长度增加到50MB的语句

     编写和执行向数据库ClassNorthwind添加一个事务日志文件ClassNorthwind_LogApp,文件属性如下:

位置 C:\dataapp
初始大小 20MB
文件增长 1MB
最大文件长度 40MB

实践2:创建和修改SQL Server数据库的表

(1)创建数据库ClassNorthwind中的雇员表Employees、雇员工资表wage和工资税表tax

雇员表Employees:

字段名称   类型  空否
EmployeeID Int,identity ,初值为1,增量为1 NOT NULL
Name VarChar(10) NOT NULL
Sex Char(2) NOT NULL
Birthdate Date NULL
Address Varchar(50) NULL
Phone Char(13) NULL
Remark text

雇员工资表wage:

字段名称  类型  空否

EmployeeID Int NOT NULL
Name VarChar(10) NOT NULL
Wage money NOT NULL
Putdate Date NOT NULL

工资税表tax:

字段名  类型  空否

EmployeeID Int NOT NULL
Name VarChar(10) NOT NULL
Tax money NOT NULL
Paydate Date NOT NULL

(2)向雇员表Employees中添加列Department varchar(20) NULL

(3)修改雇员表Employees中的列Address varchar(60)

(4)删除雇员表Employees中的列Remark

(5)用存储过程sp_help查看三个表的信息

(6)向雇员表Employees中插入十个雇员信息

(7)向雇员工资表wage中插入十个雇员相应的工资发放情况信息

(8)向工资税表tax中插入十个雇员相应的交税情况

实践3:创建SQL Server数据库表的视图和索引

(1)在雇员表Employees中,创建一个name和phone列上的合成索引

(2)使用存储过程sp_helpindex Employees列出表的索引

(3)分别查询雇员表Employees、雇员工资表wage和工资税表tax中的行数据

(4)创建一个视图,用于检索雇员工资、税款情况,包括下列字段:

EmployeeID、Name、Sex、Wage、Putdate 、Tax、Paydate

(5)创建一个视图,用于检索雇员工资高于1000元的雇员情况表

(6)创建一个视图,用于检索雇员工资高于5000元的雇员情况表

实践4:查询SQL Server数据库表的信息


(1)列出每个雇员的工资、税款情况一览表

(2)列出工资超过1000元,而未交税的雇员

(3)列出工资在1000元以下,不应该交税的雇员情况一览表

(4)列出只领工资而未交税的雇员表

(5)对以上四种情况各作一统计报告

(6)删除三个表中的所有记录

实践5:实现SQL Server数据库的完整性

(1)创建雇员表Employees的主关键字,列:EmployeeID

(2)创建雇员工资表wage的外部关键字,列:EmployeeID,参考Employees的主键

(3)创建工资税表tax的外部关键字,列:EmployeeID,参考Employees的主键

(4)向雇员表Employees中添加关于以下列的DEFAULT约束:

name:unknown,sex:男,Address:Salt Lake,Phone:(000)00000000

(5)向雇员表Employees中添加BirthDate列的CHECK约束:在BirthDate列中的值必须早于今天的日期

(6)定义雇员电话号码Phone的规则:(***)********,其中*是0~9之间的数字字符

(7)执行存储过程sp_helpconstraint浏览上面创建的约束信息

(8)向雇员表Employees中插入十个雇员信息,并检查约束

(9)向雇员工资表wage和工资税表tax中添加关于以下列的DEFAULT约束:

Putdate:昨天,Paydate:昨天

实践6:SQL Server数据库的高级查询

(1)分别列出在雇员表Employees中而未领工资和未交税的男、女雇员情况

(2)查询电话号码区号为(010)、工资大于3000的男雇员情况

(3)查询交税最多的六名雇员情况

(4)列出工资在前六名的,而交税并不在前六名的雇员情况

实践7:创建、执行、修改SQL Server数据库的存储过程

(1)编写存储过程,向雇员表Employees、雇员工资表wage和工资税表tax中各插入两条记录

(2)编写存储过程,列出工资最高的六名雇员情况

(3)编写存储过程,查找雇员表Employees中Sex、Phone与指定值相匹配的雇员

(4)编写存储过程,查找雇员表Employees中BirthDate在指定两个日期之间的雇员

(5)编写存储过程,用于计算男、女雇员的平均工资,男、女雇员的人数,并输出

(6)用存储过程sp_helptext查看上面的存储过程定义

实践8:创建和使用SQL Server数据库的触发器

(1)创建触发器,从雇员表Employees中一次删除的记录数应不超过2条

(2)创建触发器,当向雇员工资表wage中插入记录时,同时向工资税表tax中插入记录,工资税计算为:

Wage:1000以下,不交税;1000~5000:交税工资的1%

5000以上:交税工资的3%

(3)创建触发器,当修改雇员工资表wage中的记录时,同时修改工资税表tax中的记录

(4)创建触发器,当删除雇员表Employees中的记录时,同时删除雇员工资表wage和工资税表tax中的有关该雇员的所有记录

(5)创建触发器,当修改工资税表tax中Tax列的值时,检查交税情况是否符合(2)的交税比例

(6)测试上面创建的触发器

实践9:使用SQL Server数据库的游标

(1)使用游标获取雇员表Employees中的记录

(2)使用游标检查雇员工资税的交纳是否正确

实践10:使用SQL Server数据库的用户字定义函数

(1)编写函数,按男、女雇员分类计算平均工资和合计工资

(2)编写函数,查找雇员表Employees中Sex、Phone与指定值相匹配的雇员

(3)编写函数,查找雇员表Employees中BirthDate在指定两个日期之间的雇员

(4)定义数据类型mytext,向雇员表Employees中添加列Remark,其类型为mytext

     [文章来源:“十万个为什么”电脑学习网]
     [网络地址:http://why100000.com]
     [版权声明:除本站部分特别声明禁止转载的专稿外,其他的文章可以自由转载,但请务必注明出处和原始作者。本站文章版权归文章原作者所有。如果本站转载的文章有版权问题请联系本站,我们会尽快予以更正。]
 

【字体:[大] [中] [小] 【加入收藏】 【发表评论】 【关闭本窗口】

Copyright © “十万个为什么”电脑学习网 2000-2007 陕ICP备06007929号
站务联系:MSN & Email:zhangking2008@gmail.com  QQ:9365822