文档库 最新最全的文档下载
当前位置:文档库 › sqlServer2005习题与答案

sqlServer2005习题与答案

sqlServer2005习题与答案
sqlServer2005习题与答案

从学生表Student(Sno,Sname,Ssex,Sage,Sdept)中查询出全体学生的学号与姓名

1. 查询全体学生的详细记录

2. 显示前5条纪录

3. 显示前50%条纪录

4. 查询所有年龄在17岁以下的学生姓名及其年龄。

5. 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。(成绩为null)

6. 查所有有成绩的学生学号和课程号

7. 查询学生的所有信息,按学号的降序排列

1.select * from student

2.select top 5 * from student

3.select top 50 percent * from student

4.select sname,sage from student where sage<17

5.select sno,cno from sc where score is NULL

6.select sno,cno from sc where score is not NULL

7.select * from student order by sno desc

8 查询选修了课程的学生学号

9. 查全体学生的姓名及其出生年份,显示两列:姓名、出生年份

10. 查询年龄在15~17岁(包括15岁和17岁)之间的学生的姓名、年龄。

11. 查询年龄不在15~17岁之间的学生姓名、系别和年龄。

12. 查询年龄不在15~17岁之间的男生姓名、系别和年龄。

13. 将上题查询的结果插入一个新表中。

8.select distinct sno from sc

9.select sname,2010-sage as 出生年份from student

10.select sname,sage from student where sage between 15 and 17

11.select sname,sdept,sage from student where sage is not between 15 and 17

12.select sname,sdept,sage from student where ssex='男' and sage is not between 15 and 17

13.select sname,sdept,sage into newtable from student where ssex='男' and sage is not between 15 and 17

1. 查询学生总人数。

2. 查询选修了课程的学生人数。

3. 计算1001号课程的学生平均成绩。

4. 查询选修1号课程的学生最高分数。

5. 求各个课程号及相应的选课人数。(group by)

6. 查询选修了1门以上课程的学生学号。(having)

7. 请说明union的作用。

1.select count(*) from student

2.select count(distinct sno) as 人数from sc

3.select avg(score) as 平均成绩from sc where cno =1001

4.select max(score) as 最高分数from sc where cno =1

5.select cno,count(*) as 选课人数from sc group by cno

6.select cno, count(*) as 选课人数from sc group by cno having count(*)>1

1. 查询学生总人数。

2. 查询选修了课程的学生人数。

3. 计算1001号课程的学生平均成绩。

4. 查询选修1001号课程的学生最高分数。

5. 求各个课程号及相应的选课人数。(group by)

6. 查询选修了1门以上课程的学生学号。(having)

7. 请说明union的作用。

1.select count(*) as 总人数from student >

2.select count(distinct sno) as 总人数from sc >

3.select avg(score) as 平均成绩from sc where cno=1001 >

4.select max(score) from sc where cno=1001

>5.select cno,count(*)as 人数,max(score ) from sc group by cno

>6.select sno from sc group by sno having count(cno)>1

>7.在列数和列的顺序相同且数据类型相同的前提下,将多个select语句返回的结果组合到同一个结果当中。

>请举例说明With cube和With rollup的作用。

select cno,cname,count(cno)as 人数from course group by cno,cname with cube说明每一个分组统计的总数

select cno,cname,count(cno)as 人数from course group by cno,cname with rollup说明每一个小分组的统计总数

>3. 使用compute 汇总所有学生的成绩平均分。

select sno,cno,score from sc compute avg(score) 统计所有内容,求出平均成绩

>4. 使用compute by汇总每个人的选修课程数。

select * from sc order by sno,cno compute count(cno) by sno按SNO,CNO分组进行统计

>使用ANSI连接和sql server 连接两种方式完成:

>1. 查询每个学生的学号、姓名及其选修课程的课程号、成绩。

使用ANSI:select student.sno,sname,sc.sno,cno from student inner join sc on student.sno=sc.sno

使用sql server:select student.sno,sname,sc.sno,cno from student,sc where student.sno=sc.sno

>2. 查询出'101'号学生选修的课程的课程名称和学分

使用ANSI:select cname,ccredit from course inner join sc on https://www.wendangku.net/doc/304100234.html,o=https://www.wendangku.net/doc/304100234.html,o 使用sql server:select cname,ccredit from course,sc where https://www.wendangku.net/doc/304100234.html,o=https://www.wendangku.net/doc/304100234.html,o and sc.sno='101'

查询出选修‘1002’号课程的学生的学号、姓名。

使用ANSI select student.sno,sname from student inner join sc on student.sno=sc.sno and https://www.wendangku.net/doc/304100234.html,o='1002'

使用sql server:select student.sno,sname from student,sc where student.sno=sc.sno and https://www.wendangku.net/doc/304100234.html,o='1002'

--查询与“name2”在同一个系学习的学生信息。

select *from student where sdept in (select sdept from student where sname='name2')and sname!='name2'

查男女各有多少人select ssex ,count(*)as 人数from student group by ssex

按降序排列:group by是分组order by 是排序

select ssex ,count(*)as 人数from student group by ssex order by ssex desc

选课多余2的人数select cno,count(*)from sc group by cno having count(*)>'2'

查询出‘101’号学生选修的课程的课程名称和学分。

使用sql server:select cname,ccredit from sc,course where sno='101' and https://www.wendangku.net/doc/304100234.html,o=https://www.wendangku.net/doc/304100234.html,o

使用ANSI:select cname,ccredit from course inner join sc on https://www.wendangku.net/doc/304100234.html,o=https://www.wendangku.net/doc/304100234.html,o and sno='101' 嵌套查询:select cname,ccredit from course where cno in (select cno from sc where sno='101') exists查询:select cname,ccredit from course where exists(select * from sc where cno=https://www.wendangku.net/doc/304100234.html,o and sno='101')

--查询选修课程号为“1001”的所有男生的姓名和该科成绩。

sql server:select sname, score from student,sc where student.sno=sc.sno and https://www.wendangku.net/doc/304100234.html,o='1001'and student.ssex='男'

ANSI:select sname,score from student inner join sc on student.sno=sc.sno and student.ssex='男'and https://www.wendangku.net/doc/304100234.html,o='1001'

--查询出‘101’号学生选修的课程的学分总和。

--使用sql server:select sum(ccredit) as 总学分from sc,course where sc.sno='101'and https://www.wendangku.net/doc/304100234.html,o=https://www.wendangku.net/doc/304100234.html,o

--使用ANSI:select sum(ccredit) as 总学分from course inner join sc on sc.sno='101'and https://www.wendangku.net/doc/304100234.html,o=https://www.wendangku.net/doc/304100234.html,o

--嵌套查询:

select sum(ccredit) as 总学分from course where cno in(select cno from sc where sno='101')

--exists:select sum(ccredit) from coursewhere exists(select cno from sc where sno='101' and https://www.wendangku.net/doc/304100234.html,o=https://www.wendangku.net/doc/304100234.html,o)

--查询出每个学生已经修过的总学分。

sql server:select sno,sum(ccredit) as 总学分from sc,course where https://www.wendangku.net/doc/304100234.html,o=https://www.wendangku.net/doc/304100234.html,o group by sc.sno order by sum(ccredit) desc

--使用ANSI:select sno,sum(ccredit) as 总学分from scinner join course on https://www.wendangku.net/doc/304100234.html,o=https://www.wendangku.net/doc/304100234.html,o group by sc.sno

order by sum(ccredit) desc

--查询出选修‘c语言’的学生的学号、姓名和成绩

--使用sql server:

select student.sno,sname,score

from student,sc,course

where https://www.wendangku.net/doc/304100234.html,ame='c'

and student.sno=sc.sno

and https://www.wendangku.net/doc/304100234.html,o=https://www.wendangku.net/doc/304100234.html,o

--查询出选修了学分是4的课程的学号

--使用sql server:

select https://www.wendangku.net/doc/304100234.html,o,sno

from sc,course

where https://www.wendangku.net/doc/304100234.html,o=https://www.wendangku.net/doc/304100234.html,o

and https://www.wendangku.net/doc/304100234.html,redit='4'

--查询出选修了学分是4的课程的姓名

--使用sql server:

select cname,sno

from sc,course

where https://www.wendangku.net/doc/304100234.html,o=https://www.wendangku.net/doc/304100234.html,o

and https://www.wendangku.net/doc/304100234.html,redit='4'

--查询出没有选修学分是4的课程的学号

--使用sql server:

select sno ,https://www.wendangku.net/doc/304100234.html,o

from sc,course

where https://www.wendangku.net/doc/304100234.html,o=https://www.wendangku.net/doc/304100234.html,o

and https://www.wendangku.net/doc/304100234.html,redit<>'4'

1.将一个新生记录(学号:111;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。

insert into

student (sno,sname,ssex,sage,sdept)

values ('111','陈冬','男','18','IS')

2.插入一条选课记录(sno:'111',cno:'1111 '),新插入的记录在score列上将会取空值。能插入吗?

存在外键则不能

3.student数据库中,有一个表Deptage(Sdept,Avgage)用来存放每个系的学生平均成绩,但还没有数据。请你对每一个系求学生的平均年龄,并把结果存入表Deptage。

select sdept,avg(sage)as avgage

into avger

from student

group by sdept

任务2(update):

1.将学生'101'的年龄改为19岁。

update student

set sage='19'

where sno='101'

2.将所有学生的年龄增加1岁。

update student

set sage=sage+1

3.将信息系全体学生的成绩置零。

update sc

set score=0

where sno in (

select sno from student

where sdept='信息')

任务3(delete):

1.删除学号为'102'的学生选课记录。

delete sc

where sno='102'

2.删除所有的学生选课记录。

delete sc

3.删除信息系所有学生的选课记录。

delete sc

where sno in(

select sno

from student

where sdept='信息')

4.你能删除student表中学号为'101'的学生记录吗?问什么?

不能删除

DELETE 语句与REFERENCE 约束"FK_sc_student1"冲突。该冲突发生于数据库"students",表"dbo.sc", column 'sno'。

任务1:回答以下问题:

1. 什么是视图

2. 使用视图的优点

3. 创建视图的注意事项

步骤1:每个人独立完成,15分钟。

步骤2:提问学生任务完成情况,5分钟

步骤3:教师补充点评,5分钟。

任务2:创建一个视图view1,查询选修课程号为"1001"的所有女生的姓名和该科成绩。create view view1

as

select sname,score from student inner join sc on student.sno=sc.sno

where ssex='女' and cno='1001'

任务3:完成以下操作:创建一个视图v1,在视图中包含sc表中及格的选课信息。create view v1

as select *from sc

where score>=60

1. 插入数据记录:将这两条记录插入视图v1 中('105','1001',69)('105','1002',50)。观察视图和表的记录变化。

insert into v1

values ('105','1001',69)

insert into v1

values ('105','1002',50)

2. 修改数据记录:修改视图v1,将('105','1001',69)的成绩改为99

UPDATE v1

set score='99'

where sno='105' and cno='1001'。

3. 删除数据记录:修改视图v1,删除105号学生的选课记录。

delete from v1

where sno='105'

步骤1:每个人独立完成,5分钟。

步骤2:与你的同组搭档得出一个小组结果,5分钟。

步骤3:学生介绍任务完成情况,3分钟。

步骤4:教师补充点评,2分钟。

任务4:创建视图v1,

create view v1 as

select student.sno,sname,cno,score

from student inner join sc

on student.sno=sc.sno

完成:

1. 将满足sno='101' and cno='1003'的记录sname改为n1.

UPDATE v2

set sname='n1'

where sno='101' and cno='1003'

2. 将满足sno='101' and cno='1004'的记录sname改为n1,cno改为1002.

不行

3. 将sno='109',sname='name9'的记录插入v1.

4. 将sno='110',sname='nam10',score=99的记录插入v1,能够正确执行吗?

5. 删除sno='101' and cno='1004'的记录,可以吗?

不可以,因为关系到多个基表

任务1:通过学习教材及课件回答以下问题:

1. 标识符命名规则

答:标识符分为标准标识符和分隔标识符两大类

2. 如何注释

3. 局部变量的声明、赋值方式

4. 全局变量的特点,使用。

5. 声明一个变量x并为x赋值,查询成绩大于x(x是局部变量)的学生学号和选修的课程号.

declare @x int

set @x=90

select sno,cno,score from sc where score>=@x

6. 声明一个变量avgscore,并将sc表中成绩的平均分赋值给变量avgscore。你有几种赋值方式?

declare @avgscore int

set @avgscore=(select avg(score) from sc)

select @avgscore 平均成绩

go

5. 声明一个变量x并为x赋值,查询成绩大于x(x是局部变量)的学生学号和选修的课程号.

declare @x int

set @x=60

select sno,cno from sc where score>@x

6. 声明一个变量avgscore,并将sc表中成绩的平均分赋值给变量avgscore。你有几种赋值方式?

declare @avgscore int

set @avgscore=(select avg(score) from sc)

print @avgscore

select @avgscore=avg(score) from sc

print @avgscore

>>--no是student表的identity列

>>insert into student(sno,sname) values('110','name10')

>>select @@identity identity1

>>go

>>

>>

>>select * from student where sno='101' or sno='102'

>>go

>>select @@rowcount

>>go

>>

>>

>>

>>use students

>>go

>>select @@trancount as trancount1,@@servername servername1,@@version version1,@@identity identity1,@@language language1

>>go

>>--no是student表的identity列

>>insert into student(sno,sname) values('110','name10')

>>select @@identity identity1

1.(if)如果sc表中所有学生的平均成绩大于80,显示'成绩优异',并显示出成绩大于80的选课记录。否则显示学生成绩一般。

declare @avgscore int

set @avgscore=(select avg(score) from sc where score is not NULL)

if @avgscore>=80

begin

print '成绩优异'

select * from sc where score>=80

end

else

begin

print '成绩一般'

end

--在student中查询学生信息,如果存在此生,则将学生的信息输出;如果不存在此生,则输出数据库中没有该生信息

declare @name nchar(8)

set @name='name1'

if exists(select * from student where sname=@name)

begin

print ''

select *from student where sname=@name

end

else

begin

print'数据库中没有该生信息。'

end

--3.(while)使用while循环,对course表中的学分总和进行检查,

--若学分总和小于50,对每门课程学分加1,直到学分总和不小于50为止。

while ((select sum(ccredit) from course)<50)

begin

update course

set ccredit=ccredit+1

if(select sum(ccredit) from course)>=50

break

end

//使用while循环,对course表中的学分总和进行检查,若学分总和小于50,

//对每门课程学分加1,直到学分总和不小于50为止。

declare @sumc int

set @sumc=(select sum(ccredit) from course)

WHILE @sumc<50

BEGIN

UPDATE course

SET ccredit= ccredit+1

set @sumc=(select sum(ccredit) from course)

END

WHILE (SELECT sum(ccredit) FROM course) < 50

BEGIN

UPDATE course

SET ccredit= ccredit+1

END

--4.(try catch)在try中删除student表中学号是'101'的记录,

--若不能删除,在catch中给出提示信息。

begin try

delete from student where sno='101'

end try

begin catch

print '出错信息为: '+error_message()

end catch

--Waitfor delay '00:00:03'

Waitfor time '17:01:00'

begin try

delete student where sno='101'

end try

begin catch

print error_message()

end catch

练习题:

--(1)返回当前日期的年月日

select getdate() as 当前时间

--(2)在update语句中使用@@rowcount变量来检测是否存在发生更改的记录update student

set sno='108'

where sno='110'

if @@rowcount=0

print'警告:没有发生记录更新'

--(3)运用case语句

select sc.sno,sname,成绩=

case

when score<60 then '不及格'

when score>=60 and score<70 then '及格'

when score>=70 and score<80 then '中等'

when score>=80 and score<90 then '良好'

when score>=90 then '优秀'

else '无成绩'

end

from student,sc

where student.sno=sc.sno

练习:编写一个用户自定义函数zf1,要求根据输入学号,返回该某生总分。CREATE FUNCTION zf1(@xh nchar(3))

RETURNS int

AS

BEGIN --该语句不可缺

DECLARE @xszf int

SELECT @xszf =SUM(score)

FROM sc

WHERE sno = @xh

RETURN(@xszf)

END --该语句不可缺

go

Select dbo.zf1('101') as 某生总分

go

练习:编写一个用户自定义函数zf,要求根据输入课程号,返回该门课的成绩平均值。

[例]:设计一函数可查询出某学生选课信息

CREATE FUNCTION cxchj(@xh nchar(3))

RETURNS TABLE

AS

RETURN (Select *

from sc

Where sno= @xh)

调用:

Select * from cxchj('101')

练习:设计一函数可查询出选修某课程的选课信息

CREATE FUNCTION xk(@no nchar(4))

RETURNS TABLE

AS

RETURN (Select *

from sc

Where cno= @no)

调用:

select * from xk('1001')

【例】编写一个自定义函数xuanke,查询出@cno1和@cno2号课程的选课信息。

CREATE FUNCTION xuanke1(@cno1 nchar(4),@cno2 nchar(4))

RETURNS @xuanke TABLE

(sno nchar(3),

cno nchar(4)

)

BEGIN

--多个insert语句

INSERT INTO @xuanke

SELECT sno,cno from sc where cno=@cno1

INSERT INTO @xuanke

SELECT sno,cno from sc where cno=@cno2

RETURN --不可缺

END

--调用函数

--select * from xuanke1('1001','1002')

go

declare @cno1 nchar(4),@cno2 nchar(4)

select @cno1='1001',@cno2='1002'

select * from xuanke1(@cno1,@cno2)

go

练习1 (标量函数、内嵌表值函数):编写一个自定义函数f_avg,查询出某个系的学生平均成绩

方法一:

create function f_avg(@se nchar(20))

returns table

as

return(select avg(score) as 平均分

from sc where

sno in

(select sno from student

where sdept=@se))

go

select * from f_avg('信息')

方法二:

CREATE FUNCTION f_avg(@xi nchar(20)) RETURNS TABLE

AS

RETURN

(Select sdept,avg(score)as 平均成绩

from student inner join sc

on student.sno=sc.sno

group by sdept

having sdept=@xi)

调用:

select * from f_avg('信息')

方法三:

CREATE FUNCTION f_avg5(@xi nchar(20)) RETURNS int

AS

begin

declare @a int

Select @a=avg(score)

from student inner join sc

on student.sno=sc.sno

where sdept=@xi

return(@a)

End

select dbo.f_avg5('旅外')

方法四:

CREATE FUNCTION f_avg(@xi nchar(20)) RETURNS TABLE

AS

RETURN

(Select avg(score)as 平均成绩

from student inner join sc

on student.sno=sc.sno

where sdept=@xi)

练习2 (多语句表值函数):编写一个自定义函数xi_avg,查询出每个系的学生平均成绩------------------------------------------------------------------------------------------

1.(无参数)用命令方式创建并执行一个存储过程proc_sc1,从sc表中查询101号学生的选课信息

use students

go

create proc proc_sc99

as

select * from sc where sno='101'

go

exec proc_sc99

2.(带输入参数)用命令方式创建并执行一个的存储过程proc_sc2,该存储过程带有输入参数@stu_no,从sc表中查询学号是@stu_no的学生的选课信息。

use students

go

create proc proc_sc100

@stu_no nchar(3)='102'

as

select * from sc where sno=@stu_no

go

exec proc_sc100 @stu_no=default

(exec proc_sc103 @stu_no='102')

3.(带输入参数和输出参数)用命令方式创建并执行一个的存储过程proc_sc3,该存储过程带有输入参数@stu_no和输出参数@stu_avg,从sc表中查询学号是@stu_no的学生的成绩平均分并赋值给输出参数@stu_avg。

use students

go

create proc proc_sc007

@stu_no nchar(3),

@stu_avg int output

as

select @stu_avg=avg(score)

from sc

where sno=@stu_no

go

declare @stu_avg int

exec proc_sc001 '102',@stu_avg output

print '该生平均成绩为:'+cast(@stu_avg as char(6))

4.(带输入参数、输出参数、返回值)用命令方式创建并执行一个的存储过程proc_sc4,该存储过程带有输入参数@stu_no和输出参数@stu_avg,从sc表中查询学号是@stu_no的学生的成绩平均分并赋值给输出参数@stu_avg 。从sc表中查询学号是@stu_no的学生的成绩总分并用return返回。

use students

go

create proc proc_sc88

@stu_no nchar(3),@stu_sum int output,

@stu_avg int output

as

select @stu_avg=avg(score),@stu_sum=sum(score)

from sc

where sno=@stu_no

return(@stu_sum)

go

declare @stu_sum int, @stu_avg int

exec proc_sc88 '102',@stu_sum output,@stu_avg output

print '该存储过程执行结果如下:'

print'平均分='+cast(@stu_avg as char(4))

print'总分='+cast(@stu_sum as char(4))

P146第二题第二小题:

create proc proc_list

@cour_no nchar(4)

as

declare @score int

select top 5 * into a from sc where cno=@cour_no order by score desc,sno asc

select @score=min(score) from a

insert into a

select * from sc where cno=@cour_no and score=@score and sno not in(select sno from a) select * from a order by score desc

drop table a

go

exec proc_list '1001'

select * from sc where cno='1001' order by score desc

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

使用游标:

declare stu_cursor insensitive scroll cursor

for

select student.sno,sname,sc.sno,cno

from student,sc

where student.sno=sc.sno

for read only

go

open stu_cursor

go

fetch next from stu_cursor

go

close stu_cursor

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

使用游标:

create proc proc_list

@cour_no nchar(4)

as

declare @score int

select top 5 * into a from sc where cno=@cour_no order by score desc,sno asc

--select * from a order by score desc

select @score=min(score) from a

insert into a

select * from sc where cno=@cour_no and score=@score and sno not in(select sno from a) select * from a order by score desc

drop table a

go

exec proc_list '1001'

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

使用游标:

alter proc proc_list

@cour_no nchar(4)

as

declare cursor_sc scroll cursor --声明游标

for select top 5 score from sc where cno=@cour_no order by score desc,sno

open cursor_sc

declare @score int

fetch last from cursor_sc into @score

close cursor_sc --关闭游标

deallocate cursor_sc --删除游标

select top 5 * into a from sc where cno=@cour_no order by score desc,sno

insert into a

select * from sc where cno=@cour_no and score=@score and sno not in(select sno from a)

select * from a order by score desc

drop table a

go

exec proc_list '1001'

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

create trigger remenbr

on sc

for insert,update

as

if update(score)

begin

print'处理正在进行……'

declare @data int

select @data=score from inserted

if @data<60

begin

print'数据太小!'

rollback transaction

end

end

update sc

set score=120

where sno='101' and cno='1002'

go

select * from sc

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

declare sc_cursor insensitive scroll cursor

for

select *from sc where cno='1001'

for read only

go

open sc_cursor

go

fetch next from sc_cursor

fetch first from sc_cursor

go

close sc_cursor

go

deallocate sc_cursor

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

Create TRIGGER reminder

ON sc

FOR UPDATE

AS

IF UPDATE(score)

BEGIN

PRINT '触发器正在执行……'

DECLARE @Newqty int

SELECT @Newqty=score FROM INSERTED

IF @Newqty>=60

BEGIN

declare @stuno nchar(3)

declare @couno nchar(4)

declare @coucre int

select @stuno=sno from inserted

select @couno=cno from inserted

select @coucre=ccredit from course where cno=@couno

update sumcredit set scsum=scsum+@coucre where sno=@stuno

END

END

go

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

1. sql server的身份验证方式有哪些?如何设置?

答:两种模式(1)windows身份验证(2)混合模式

2.请创建一个windows登陆账号win_user和一个sql server 登陆账号sql_use.

帐户包含两种:登录者和数据库用户

3.请创建一个students用户win_user ,其对应的登陆账号是win_user,创建一个students用户sql_use ,其对应的登陆账号是win_user。

4.应将登陆账号sql_use添加到哪个服务器角色中,该账户才能执行sql server的任何操作?请完成添加操作。

sysadmin服务器角色

5.应将students用户win_user 添加到哪个数据库角色,该用户才能执行所有数据库任何操作?请完成添加操作。

db_owner数据库角色

6. 修改students用户win_user 的权限,使其只能对sc表进行select操作。

对象权限、语句权限、固定角色权限

SQLServer的简介及发展历程

S Q L S e r v e r的简介及发展历程SQL简介 SYSTEMR开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM 语言作为查询语言。 织,负责开发美国的商务和通讯标准。ANSI同时也是ISO和InternationalElectrotechnicalCommission(IEC)的 ANSI随之发布的相应标准是ANSISQL-92。ANSISQL-92有时被称为ANSISQL。尽管不同的关系数据库使用的SQL版本有一些差异,但大多数都遵循ANSISQL标准。SQLServer使用ANSISQL-92的扩展集,称为T-SQL,其遵循ANSI 制定的SQL-92标准。 SQL发展历史 1970:E.J.Codd发表了关系数据库理论(relationaldatabasetheory); 1974-79:IBM以Codd的理论为基础开发了“Sequel”,并重命名为"SQL"; 1979:Oracle发布了商业版SQL 1981-84:出现了其他商业版本,分别来自IBM(DB2),DataGeneral(DG/SQL),RelationalTechnology(INGRES); SQL/86:ANSI跟ISO的第一个标准; SQL/89:增加了引用完整性(referentialintegrity); SQL/92(akaSQL2):被数据库管理系统(DBMS)生产商广发接受; 包括oids; SQL/2003:包含了XML相关内容,自动生成列值(columnvalues); 2005-09-30:“Dataisthenextgenerationinside...SQListhenewHTML”!TimO'eilly提出了Web2.0理念,称数据将是核心,SQL将成为“新的HTML"; SQL/2006:定义了SQL与XML(包含XQuery)的关联应用; 2006:Sun公司将以SQL基础的数据库管理系统嵌入JavaV6 2007:SQLServer2008(Katmi)在过去的SQL2005基础上增强了它的安全性,主要在:简单的数据加密,外键管理,增强了审查,改进了数据库镜像,加强了可支持性。 SQLServer的基本信息 SQLServer是一个关系数据库管理系统。它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,于1988年推出了第一个OS/2版本。在WindowsNT推出后,Microsoft与Sybase在SQLServer的开发上就分道扬镳了,Microsoft将SQLServer移植到WindowsNT系统上,专注于开发推广SQLServer的WindowsNT版本。Sybase则较专注于SQLServer在UNIX?操作系统上的应用。数据库引擎是SQLServer系统的核心服务,负责完成数据的存储、处理和安全管理。

sqlserver2005分割字符串,循环输出示例

create function f_splitstr(@source varchar(500),@split varchar(5)) returns @temp table(tid varchar(50)) as begin declare @ch as varchar(50) set @source=@source+@split while(@source<>'') begin set @ch=left(@source,charindex(',',@source,1)-1) insert @temp values(@ch) set @source=stuff(@source,1,charindex(',',@source,1),'') end return end --select tid from dbo.f_splitstr('xxxxxxx,ttttt,yyyyyy,ererer',',') --select getdate() declare @i int,@countNum int, @para varchar(50) declare tid_cursor CURSOR for select tid from dbo.f_splitstr('xxxxxxx,ttttt,yyyyyy,ererer',',') open tid_cursor FETCH NEXT FROM tid_cursor into @para WHILE@@FETCH_STATUS= 0 BEGIN print @para FETCH NEXT FROM tid_cursor into @para END; CLOSE tid_cursor DEALLOCATE tid_cursor GO

熟悉SQLserver2005系统

西北师范大学计算机科学与工程学院学生实验报告 学号201271040109 专业软件工程班级软件工程1班姓名郭宏乐 课程类型 课程名称熟悉SQLserver2005系 统 实验名称熟悉SQLserver2005系统 实验目的:1:熟悉SQLserver2005系统. 2:学会安装SQLserver2005系统。 3学会运用SQLserver2005系统。 实验内容: 1实验步骤: (1)SQLserver2005安装: 安装过SQL Server的人可能知道,它的有些服务要依赖于IIS,所以为了保证数据库的顺利安装,先启用IIS服务吧!Win7比XP好的一点是:启用IIS功能无需借助系统安装盘了,只要在控制面板里启用即可,如图: step1

step2 第三步需要注意的是,选中红框中的复选项,分别为“Internet Information Services 可承载的Web 核心”、“Web 管理工具”和“万维网服务”,这里我不确定“Web 管理工具”是否需要,因为我选中它们的父节点“Internet 信息服务”后选中了它的一些子项,多选总比少选全面,需要将它们的子项全部选中才显示为“√”,否则显示为“■”,记住,一定要显示为“√”才行,效果就和step3一样就可以了!点击确定后会出现线面的框框

如果我们不启用IIS功能,在后续安装SQL Server时会遇见如图画面 到此,IIS功能就算启用完成了,下面开始安装SQL Server 安装文件解压后是一个ISO的镜像,其实是一个DVD文件,将两张光盘合并到一起了,所以你的电脑需要安装虚拟光驱,虚拟光驱不会用请先百度一下,我就不在这里赘述了。 首先启动虚拟光驱软件,把SQL Server的镜像加载进来,如图

SQLServer2005函数大全

SQL Server 2005 函数大全 字符串函数 (2) 日期和时间函数 (3) 日期部分 (5) 数学函数 (6) 数据类型转换函数 (7) 日期类型数据转换为字符数据类型的日期格式的部分样式表 (8) 系统函数 (11) 排名函数 (11) 聚合函数 (12)

字符串函数 表达式:是常量、变量、列或函数等与运算符的任意组合。以下参数中表达式类型是指表达式经运算后返回的值的类型 函数名称参数示例说明 ascii (字符串表达式) select ascii('abc') 返回 97返回字符串中最左侧的字符的ASCII码。 char(整数表达式) select char(100) 返回 d 把ASCII 码转换为字符。 介于0 和255 之间的整数。如果该整数表达式不在此范围内,将返回NULL 值。 charindex (字符串表达式1,字符串表达式 2[,整数表达式]) select charindex('ab','BCabTabD')返回3 select charindex('ab','BCabTabD',4)返回6 在字符串2中查找字符串1,如果存在返回第一个匹配的 位置,如果不存在返回0。如果字符串1和字符串2中有一个 是null则返回null。 可以指定在字符串2中查找的起始位置。 difference (字符串表达式1,字符串表达式2) select difference('Green','Greene')返回4 返回一个0到4的整数值,指示两个字符表达式的之间的相似程度。0 表示几乎不同或完全不同,4表示几乎相同或完全相同。注意相似并不代表相等 left (字符串表达式,整数表达式) select left('abcdefg',2) 返回 ab返回字符串中从左边开始指定个数的字符。 right (字符串表达式,整数表达式) select right('abcdefg',2) 返回fg返回字符串中从右边开始指定个数的字符。 len(字符串表达式) select len('abcdefg')返回 7 select len('abcdefg ') 返回7 返回指定字符串表达式的字符数,其中不包含尾随空格。lower (字符串表达式) select lower('ABCDEF')返回 abcdef返回大写字符数据转换为小写的字符表达式。 upper (字符串表达式) select upper('abcdef')返回 ABCDEF返回小写字符数据转换为大写的字符表达式。 ltrim (字符串表达式) select ltrim(' abc')返回 abc返回删除了前导空格之后的字符表达式。 rtrim(字符串表达式) select rtrim('abc ')返回 abc返回删除了尾随空格之后的字符表达式。 patindex (字符串表达式1,字符串表达式2) select patindex('%ab%','123ab456')返回4 select patindex('ab%','123ab456')返回0 select patindex('___ab%','123ab456')返回1 select patindex('___ab_','123ab456')返回0 在字符串表达式1中可以使用通配符,此字符串的第一个 字符和最后一个字符通常是%。 %表示任意多个字符,_表示任意字符 返回字符串表达式2中字符串表达式1所指定模式第一次出现 的起始位置。没有找到返回0 reverse (字符串表达式) select reverse('abcde')返回 edcba返回指定字符串反转后的新字符串space (整数表达式) select'a'+space(2)+'b' 返回 a b返回由指定数目的空格组成的字符串。

SQLServer2005完全卸载全攻略

SQLSERVER 2005卸载方法 SQL SERVER 2005不象SERVER 2000所有组件都汇总在一起,所以卸载时特别麻烦,如果不按正常的方法卸载,重新安装是不可能安装上去的。因为SQL SERVER 2005组件都是分散的,所以,必须一个一个的卸载,且要用到两个附加工具(Windows Installer Clean Up.(msicuu2.exe) 文件和SRVINSTW.exe文件),方法如下: 1.如其它软件卸载时一样,打开《控制面板》-新增删除程式 注意:卸载顺序,反向卸载: Microsoft SQL Server VSS Writer Microsoft SQL Server Setup Support Files(English) Microsoft SQL Server Native Client Microsoft SQL Server 2005 Books Online(English) Microsoft SQL Server 2005 Backward compatibillty Microsoft SQL Server 2005

2.安装Windows Installer Clean Up.(msicuu2.exe文件)。安装完后运行 选定下面条目,然后按《Remove》: Microsoft SQL Server VSS Writer Microsoft SQL Server Setup Support Files(English) Microsoft SQL Server Native Client Microsoft SQL Server 2005 Tools Microsoft SQL Server 2005 Books Online(English) Microsoft SQL Server 2005 Backward compatibillty Microsoft SQL Server 2005 3.运行SRVINSTW.exe文件,如图:

SQLServer2005查看所有存储过程

如果你想更好的了解SQL Server 2005列出所有存储过程的实际操作的相关内容的话,如果你想更好的了解SQL Server 2005列出所有存储过程的实际操作的相关内容的话,下面的文章你不妨浏览,望你能会获得自己想要的东西。 对于数据库管理员来说,可以经常想了解一些之前未听说过的存储过程,特别是无文档类型的存储过程。或许是用这些存储过程,能够简化日常的数据管理。 对于数据库管理员来说,可以经常想了解一些之前未听说过的存储过程,特别是无文档类型的存储过程。或许是用这些存储过程,能够简化日常的数据管理。 为了查找这些存储过程,你可以花时间在互联网搜索,查看一些你还未知道的存储过程,也许在一两个小时您可能会发现你想要...也许你很幸运的找到,其他人在他们的文章中列出所有的存储过程,函数和视图,并介绍了如何使用这些存储过程。 但其实,您可以在一分钟之内就可以自己列出这些存储过程、函数和视图的清单!这份名单甚至包括SQL Server中所有无文档的存储过程。通过这个清单,你就可以确定你所想要找的存储过程。 SQL Server 2005实际上保存了所有存储过程的列表,包括有文档的、无文档的,甚至是用户自定义的!所有这些信息,都包含在系统表中。最简单的方法是使用一个系统视图,特别是sys.all_objects这个视图来查阅。 您也可以使用sys.procedures目录视图,但我的测试结果,发现这个视图会过滤掉一些储存过程。 您也可以使用系统储存过程sp_stored_procedures返回当前环境中的存储过程列表,但这个存储过程同样也限制了存储过程返回值。 通过对比,我觉得:如果想获得SQL Server 2005中所有的储存程序,建议使用sys.all_objects 这个系统视图,sys.Procedures或sp_Stored_Procedures这两个视图会因为某些未知原因,过滤掉一些内容,造成信息不全。 存储过程信息是存储在各自用户数据库中的系统表中的。SQL Server 2005保存了存储过程的唯一标识信息,如存储过程的名称、创建时间、修改时间、是否来自微软等等。 如何确保所有的用户数据库都能够自动创建这些存储过程呢? 当SQL Server部署完成后,微软提供的存储过程,是保存在master数据库中的。当您新建一个数据库时,master数据库将作为模板数据库,因此,master数据库中的所有存储过程将自动创建到你所新建的数据库中。 如果你想创建一个存储过程,并希望能够自动分发到所有的数据库中,你可以在master数据库中建立该存储过程,这样之后新创建的数据库中,将自动包含你新建的这个存储过程;但对于之前已经存在的数据库,你仍需要到每个数据库中手动创建这个存储过程。

sqlserver2005双机热备

SQL Server 2005 双机热备的实现 摘自:北京洪鑫基业科技发展有限公司 测试环境: 1、宿主机 硬件配置:PIV2.4G/1.5G-DDR400/80G-PATA-7200pm/8139C-NIC 操作系统:Microsoft Windows XP Pro With SP2 ENU 虚拟平台:VMware GSX 3.2.1 2、VirtualHost Microsoft Cluster NodeA 硬件配置:PIV2.4G/512M/10G/vlance-NIC/vmxnet-NIC 操作系统:Microsoft Windows Server 2003 EE With SP1 CHS 网卡信息:vlance-NIC:10M 全速半双工/HeartBeat/IP192.168.236.250 vmxnet-NIC:1000M全速全双工 /Public/IP192.168.199.250/GW192.168.199.2/DNS192.168.199.250/WINS192.168.199.250 承载服务:DC+DNS+WINS+IIS 3、VirtualHost Microsoft Cluster NodeB 硬件配置:PIV2.4G/512M/10G/vlance-NIC/vmxnet-NIC 操作系统:Microsoft Windows Server 2003 EE With SP1 CHS

网卡信息:vlance-NIC:10M全速半双工/HeartBeat/IP192.168.236.251 vmxnet-NIC:1000M全速全双 工/Public/IP192.168.199.251/GW192.168.199.2/DNS192.168.199.251/WINS192.168.199.251 承载服务:DC+DNS+WINS+IIS 4、Virtual 4G Pln:Qdisk500M/Sdisk3500M 注意:本次测试将仲裁盘和资源盘放在了一起,实际中最佳的做法应当单独配置一个物理磁盘作仲裁使用,为提高安全性还应该为仲裁磁盘配置RAID1。 5、MSCS IP 192.168.199.200 目标实现:成功部署SQL Server 2005群集/HostName SQL2005/IP192.168.199.201 群集实施: 1、我手上的SQL2005为企业中文版2CD。首先放入第一张盘,点击“服务器组件、工具、联机丛书和示例”开始SQL2005的群集安装,安装程序会自动检测当前是否为群集环境并为群集安装准备。小提示:MSCS默认环境下,群集组资源中缺少MSDTC组件,所以需要先添加MSDTC后再开始SQL2005的群集安装,否则会出现警告并停止!

SQLserver简介

Introduction to SQL Server By Samuel Relational databases have been around for 30 years, but they were not the original kind ofdatabase, nor are they the newest kind of database. XML and object-oriented data structures haveevolved in recent years. But relational databases are still by far the most popular kind of database available and will be for some time to come. SQL is the abbreviation of Structured Query Language and it is for relational databases, as the title indicates this is only for fresher who has just started the carrier or who is waiting to open up the carrier in the application programming side. But that does not mean this article is a tutorial for a fresher who does not know anything about SQL.This article is meant for who already have a little knowledge in SQL and want toimprove it. What Does SQL Do? F irst, SQL is the premier tool for viewing information from a relational database. It doesn’t just give you a data dump. SQL gives you sophisticated tools to summarize, consolidate, and calculate from the data. Using table relationships, data can be combined from multiple tables in a number of ways. With a properly designed database, SQL can answer practically any question about the data. Second, SQL provides commands to manipulate the data in a relational database. Records can be updated and added to or deleted from a table. Here is SQL as a database language really shines. Procedural programming languages, such as BASIC, might require several lines of code to update a record in a database table. In addition, procedural programming languages would have to use some sort of looping structure to repeat this process on every record. SQL operates on an entire set of records all at the same time. SQL is like haiku for programmers; often a dozen words or fewer can delete or change thousands of records. Finally, SQL is a complete data definition language (DDL). The database itself can be created along with all tables, fields, primary keys, and relationships. Add to that the record insert commands, and you can have a complete database and all its data expressed in programming code. This greatly enhances a database programmer’s ability to work remotely or to port data enhancements among various installations. The prerequisite for learning SQL is knowledge in Discrete Mathematics (Set Theory,Relations and Functions). Although it is not necessary to learn all the

sqlserver2005简介

sql server2005简介 一、企业级数据管理 在当今的互联世界中,数据和管理数据的系统必须始终为用户可用且能够确保安全,有了S QL Server 2005,组织内的用户和IT专家将从减少应用程序宕机时间、提高可伸缩性及性能、更紧密的安全控制中获益。SQL Server 2005 也包括了很多新的和改进的功能来帮助企业的IT团队更有效率的工作。SQL Server 2005 包括了几个在企业级数据管理中关键的增强: 易管理 可用性 可伸缩性 安全性 1、易管理 SQL Server 2005 能够更为简单的部署、管理和优化企业数据和分析应用程序。作为一个企业数据管理平台,SQL Server 2005提供了一个唯一的管理控制台,使得数据管理人员能够在组织内的任何地方监视、管理和调谐企业中所有的数据库和相关的服务。它还提供了一个可扩展的管理架构,可以更容易的用SQL管理对象(SMO)来编程,使得用户可以定制和扩展他们的管理环境,独立软件开发商(ISV)也能够创建附加的工具和功能来更好的扩展应用。 SQL Server 管理工具集 SQL Server 2005 通过提供一个集成的管理控制台来管理和监视SQL Server关系型数据库、集成服务、分析服务、报表服务、通知服务、以及分布式服务器和数据库上的SQL Mob ile,从而大大简化了管理的复杂度。数据库管理员可用同时执行如下任务:编写和执行查询,查看服务器对象,管理对象,监视系统活动,查看在线帮助。SQL Server 管理工具集包括一个使用T-SQL、MDX、XMLA和SQL Server Mobile版等来完成编写、编辑和管理脚本、存储过程的开发环境。管理工具集很容易和源码控制相集成,同时,管理工具集也包括一些工具可用来调度SQL Server Agent 作业和管理维护计划以自动化每日的维护和操作任务。

SQLServer2005配置文件

【引用】SQL Server 2005 Express 远程访问设置方法 C# 2011-04-06 19:43:24 阅读3 评论0 字号:大中小订阅 本文引用自田园《SQL Server 2005 Express 远程访问设置方法》 SQL Server 2005 Express 作为微软数据库的低端解决方案,在开发小型应用和WEB应用中有广泛的使用。但是SQL Server 2005 Exrpress在默认安装下只允许本机访问,如何启用网络访问功能就很有必要, 现在我简单的介绍一下。 1、确认成功安装SQL Server 2005 Express和数据库服务已经启动。安装完成后,可以通过随SQL Server 2005 Express一同安装的工具SQL Server Configuration Manager 查看数据库服务和其他的配置 信息。 上图显示数据库服务已经启用。 2、查看SQL Server Express 2005 网络配置信息(SQL Server 2005 Network Configuration――> Protocols for SQLEXPRESS)。默认的情况下右边列表中的Named Pipes和TCP/IP的状态为Disable,即没有启用。右键点击这两项,在弹出菜单中选中Enable启用这两个协议,如下图。

3、在TCP/IP协议上双击鼠标,弹出对话框。修改对话框Protocol属性页中的“Listen All ”项设为“no”。IP Address属性页中,修改你要数据库服务监听的IP地址的属性,修改Enabled属性为Yes,修改TCP Dynamic Ports属性为空,TCP Port项在默认安装下为空,现在修改为我们监听端口1433。修改后的状态 如下图所示;

SqlServer2005 各版本区别

SQL2005 分五个版本,如下所列, 1.Enterprise(企业版), 2.Development(开发版), 3.Workgroup,(工作群版) 4.Standard,(标准版) 5.Express.(嗯,估且就叫它简易版吧) 这几个版本,我们究竟应该使用哪一版呢? 这是许多初学SQL2005的人最常问的问题。 我简单的比较一下Enterprise, Development 和Express 等三个版本:以功能言,Enterpr ise 版和Development 版的功能一模一样。两者的差别,除了授权不同外,最主要的差别是: Enterprise版的数据库引擎只能安装在Win2003Server(或其他Server)。 如果你想安装在WindowsXP Pro系统上,你应该安装SQL2005Development版(开发版)。 注:有人问,什么是「数据库引擎」。嗯,数据库引擎是SQL2005的核心,是最主要的数据库管理功能模块。没有它,就不是数据库管理系统了。 很多人下载SQL2005Express版,因为它是免费的,可以直接从微软网站上下载。但是,它除了支持的内存比较少外,最主要的是 它缺少相当于SQL2000下的「企业管理器」和「查询分析器」。 注:SQL2000下的「企业管理器」和「查询分析器」在SQL2005已合为一,称为Managem ent Studio。 因此,如果你是初学者,如果你只是想要在家里学习学习,如果你的环境是WindowsXP Pro,那么,你应该选择的是SQL2005Development(开发版),而不是SQL2005Enterprise(企业版)或SQL2005Express(简易版)。 详细区别: 可以在生产环境中使用所有版本的SQL Server 2005,但SQL Server 2005 Devel oper Edition 和SQL Server 2005 Evaluation Edition 除外。以下段落介绍SQL Serv er 2005 的多个版本。 SQL Server 2005 Enterprise Edition(32 位和64 位) Enterprise Edition 达到了支持超大型企业进行联机事务处理(OLTP)、高度复杂的数据分析、数据仓库系统和网站所需的性能水平。Enterprise Edition 的全面商 业智能和分析能力及其高可用性功能(如故障转移群集),使它可以处理大多数关键业务的企业工作负荷。Enterprise Edition 是最全面的SQL Server 版本,是超大型企业的理想选择,能够满足最复杂的要求。 SQL Server 2005 Evaluation Edition(32 位和64 位) SQL Server 2005 还推出了适用于32 位或64 位平台的180 天Evaluati on Edition。SQL Server Evaluation Edition 支持与SQL Server 2005 Enter prise Edition 相同的功能集。可以根据生产需要升级SQL Server Evaluation Edi tion。 SQL Server 2005 Standard Edition(32 位和64 位)

SQLSERVER2005服务器角色

服务器角色 当几个用户需要在某个特定的数据库中执行类似的动作时(这里没有相应的Windows用户组),就可以向该数据库中添加一个角色(role)。数据库角色指定了可以访问相同数据库对象的一组数据库用户。 数据库角色的成员可以分为如下几类: Windows用户组或用户账户 SQL Server登录 其他角色 SQL Server的安全体系结构中包括了几个含有特定隐含权限的角色。除了数据库拥有者创建的角色之外,还有两类预定义的角色。这些可以创建的角色可以分为如下几类: 固定服务器 固定数据库 用户自定义

注意: 您不能添加、修改或删除固定服务器角色。另外,只有固定服务器角色的成员才能执行 上述两个系统过程来从角色中添加或删除登录账户。 sa登录 sa登录是系统管理员的登录。在以前的SQL Server版本中不存在角色,sa 登录具有所有可能的关于系统管理工作的权限。在SQL Server 2005中,sa登录保持了向后兼容性。sa登录永远是固定服务器角色syadmin中的成员,并且不能从该角色中删除。 注意: 只有当没有其他方法登录到SQL Server系统中时,再使用sa登录。 2 固定服务器角色及其权限 在某个SQL Server系统中,每个固定服务器角色都有其隐含的权限。使用系统过程sp_srvrolepermission可以浏览每个固定服务器角色的权限。该系统过程的语法形式为: sp_srvrolepermission[[@srvrolename =] 'role'] 如果没有指定role的值,那么所有的固定服务器角色的权限都将显示出来。下面的部分将讨论每个固定服务器角色的权限。 2.1. sysadmin 固定服务器角色sysadmin的成员被赋予了SQL Server系统中所有可能的权限。例如,只有这个角色中的成员(或一个被这个角色中的成员赋予了CREATE D ATABASE权限的用户)才能够创建数据库。 固定服务器角色和sa登录之间有着特殊的关系。sa登录一直都是固定服务器角色中的成员,并且不能从该角色中删除。 2.2. serveradmin 固定服务器角色serveradmin的成员可以执行如下的动作:

Mysql数据导入到sqlserver2005详细教程,有图有真象

Mysql数据导入到sqlserver2005详细(有图有真象) 1.安装mysql数据库的ODBC驱动,mysql-connector-odbc-5.1-win3 2.msi (最好是下载这个版本的,因为3.51版本的导入后中文会出现乱码) mysql-connector-odbc-5.1-win32.msi下载地址: https://www.wendangku.net/doc/304100234.html,/detail/jingxize/4106645 软件的安装没有什么可说的,直接下一步,下一步就行了。 2.打开控制面板\管理工具\数据源ODBC,在用户DSN中添加一个MySQL ODBC 5.1数据源。

3.在登录login选项卡中输入数据源名称Data Source Name,此处输入MysqlDNS;然后输入服务器Server,用户 User,密码Password,输入正确后选择要导入的数据库,我这里的是pcc,点击ok就可以了。 如果安装的是5.1版本的话,不用考虑字符编码的问题。 安装好了之后的效果如下图: 4.打开sql server2005 managent studio的对象资源管理器,新建一数据库data。选择该数据库,单击右键选择所 有任务\导入数据。

5.选择数据源,用户/系统DSN为MysqlDNS。其余根据向导进行,即可将数据从MySql数据库导入到MSSQL 数据库中。 这里的来源就是我们在第三步添加的用户dsn驱动程序,dsn就是我们添加驱动程序时data source name,数据项是自动生成的。 点击下一步

继续下一步

继续下一步

相关文档
相关文档 最新文档