分享
 
 
 

SQL Server2000测试题

王朝mssql·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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

身份验证模式分为两种,一种是windows身份验证,另一种是混合验证.

Windows验证模式:SQL Sserver数据库通常是运行在NT服务器平台或者基于NT架构的windows2000上,而NT作为网络操作系统,本身就具有管理登陆,验证用户合法性的能力,所以windows认证正是利用这一用户安全性和账号管理的机制,允许SQL SERVER也可以使用NT用户名和密码,在该模式下,用户只要通过windows的认证就可以链接到SQL Server.

在混合认证模式下,用户既可以使用NT认证,也可以使用SQL Server认证.,在SQL Server认证模式下用户在连接SQL Sserver时必须提供登录名和密码,这些登陆信息存储在系统表syslogins中,与NT的登陆账号无关,SQL Server自己执行认证处理,如果输入的登陆信息与系统表syslogins中的某条记录相匹配,则表明登陆成功.

NT用户名和密码

登陆NT系统

SQL Server

Windows登陆认证

以下是SQL Server认证

NT系统

SQL Server账号和密码

SQL Server

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

当尝试登陆到服务器是,SQL SERVER就验证登陆帐号,当尝试连接数据库是,SQL SERVER验证数据库用户,数据库角色中包括数据库用户。

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

数据库用户用来指出那一个人可以访问哪个数据库,是对用户直接授权,而数据库角色是数据库直接授权给数据库角色,再把数据库角色指派给数据库用户,而不用直接对数据库用户直接授权,数据库对象是指数据库用户或角色可以访问指定数据库中全部或者部分表,视图等数据库对象的权限。

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

所有预定义的数据库角色和管理者自定义的某一角色都是标准角色,应用程序角色是应用程序间接地存取数据库中数据而使用的角色,应用角色不具有组的角色。

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

简单还原模型:将数据库还原到上次备份时点

完全恢复模型:提供将数据库恢复到故障点或特定时点的能力

大容量日志记录恢复模型:提供对媒体故障的防范。

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

具体情况具体分析,如果数据库的大小不是很大,数据更新速度不是很频繁,就使用完全备份,每天一次,如果数据库很大,数据更新频繁,则可以使用差异备份。

7 请使用檔与档组恢复的方式恢复数据库

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

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

用SQL SERVER代理来运行周期性备份作业

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

设置查询超时来检测数据库的阻塞,死锁由一个称为锁监视器的线程的单独线程来执行。

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

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

二 SQLSERVER的实现部分

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

Replace(substring(convert(varchar(20),getdate(),120),1,10),’-’,’ ‘)+max(订单号)+1

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

Begin transaciton

Insert into table1,insert into table2

Commit transaction

Except rollback transaction

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

将编号字段设为主键,并设置规则。

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

Delete from aa where rowid in(

Select rowid from aa where rowid not in(

Select max(rowid) from aa group by a having count(a)>1) and in (

Select a from aa group by a having count(a)>1))

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

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

表名 记录数

sales 23

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

8 表Aeditor_idlb2_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的条数)

Select count(a.lb2_id) from A

Join B

On A.lb2_id=B.lb2_id where (B.lb2_id=’000’)

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

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

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

FROM employee GROUP BY wh,age

学历 年龄 人数 百分比

本科以上 20 34 14

大专 20 33 13

高中 20 33 13

初中以下 20 100 40

本科以上 21 50 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:09 04:32:09 ......

2003-01-28 18:30:00

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

if exists(select * from sysobjects where name='crosstab' and type='P')

drop procedure crosstab

go

create procedure crosstab

--定义参数

@strtab varchar(50),

@strgroup varchar(50),

@strcase varchar(50),

@strthen varchar(50),

@strfir varchar(50)

as

declare @strsql varchar(1000),@strtmp varchar(1000)

set @strsql='select '+@strfir

--定义游标

declare cross_cursor cursor

for

select distinct subname from crosstable

--打开游标

open cross_cursor

while (0=0)

begin

fetch next from cross_cursor into @strtmp

if (@@fetch_status<>0) break

set @strsql=@strsql+',sum(case '+@strcase+' when '''+@strtmp+''' then '+@strthen+' else 0 end) as'''+@strtmp+''''

print @strtmp

end

set @strsql=@strsql+'from '+@strtab+' group by '+@strgroup

print @strsql

execute(@strsql)

close cross_cursor

deallocate cross_cursor

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能做出这样的汇总吗…

Select pid,pdate,sum(pcount) from table group by pid,pdate order by pid

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有