SQL SERVER 2000实用教程习题及实验参考答案(4)

2019-03-22 20:29

use student2 go

alter table 学生成绩表 drop constraint con_ num go

6. 利用存储过程sp_help查看3个表的信息,代码如下:

exec sp_help 基本表;exec sp_help 课程信息表;exec sp_help 学生成绩表。

7. 如何在一张表创建之后通过T-SQL语句定义主键约束?以基本表为例,代码如下:

use stuinfo go

alter table 基本表

add constraint pk_num primary key(学号)

实验六

1、 use student go

create view y_view as

select s_name,sex,polity,score,c_number from t_student,t_score

where t_student.s_number=t_score.s_number 2、 use student go

create view v_1 as select * from t_student

where polity='团员' and sex='男' 3、 use student go

create view v_2 as select * from t_student

where polity='团员' and sex='女'

16

with check option

实验七

1、在查询分析器中书写T-SQL语句创建和执行存储过程 (1)创建和执行存储过程Proc_score。

USE STUINFO GO

--创建存储过程Proc_score CREATE PROC Proc_score

WITH RECOMPILE,ENCRYPTION AS

SELECT S_number,score FROM t_score

WHERE C_number='2' --执行存储过程Proc_score EXEC Proc_score

(2)创建和执行带输入参数的存储过程Proc_list

USE STUINFO GO

--创建存储过程Proc_list CREATE PROC Proc_list @cno char(4) AS

SELECT TOP 5 WITH TIES S_number,score FROM t_score

WHERE C_number=@cno

ORDER BY score DESC,S_number ASC

--执行存储过程Proc_list,查询“1”号课程成绩排名前5位的学生成绩记录。 EXEC Proc_list '1' 其中,“1”为要传递给存储过程Proc_list的输入参数。 (3)创建和执行带输入和输出参数的存储过程ProcAvgScore

CREATE PROC ProcAvgScore @cno char(4),

@maxscore real OUTPUT, @minscore real OUTPUT,

@avgscore numeric(5,2) OUTPUT AS

SELECT @maxscore=MAX(score),@minscore=MIN(score)

17

,@avgscore=AVG(score) FROM t_score

WHERE C_number=@cno GROUP BY C_number

/*执行存储过程ProcAvgScore,查询选修“1”号课程学生成绩的最高分,最低分和平均分*/

DECLARE @maxscore real,@minscore real,@avgscore numeric(5,2) EXEC ProcAvgScore '1',@maxscore OUTPUT ,@minscore OUTPUT,@avgscore OUTPUT

PRINT '该门课程成绩最高分为:'+CAST(@maxscore AS char(6)) PRINT '该门课程成绩最高分为:'+CAST(@minscore AS char(6)) PRINT '该门课程成绩最高分为:'+CAST(@avgscore AS char(6)) 2、使用T-SQL语句查看、修改和删除存储过程 (1)查看存储过程

a.查看加密存储过程的定义 EXEC sp_helptext Proc_score

注意观察执行结果。能够查看到该存储过程的定义文本吗? b.查看未加密存储过程的定义 EXEC sp_helptext Proc_list

EXEC sp_helptext ProcAvgScore c.查看有关存储过程的信息。 EXEC sp_help Proc_score EXEC sp_help Proc_list

EXEC sp_help ProcAvgScore (2)修改存储过程Proc_score USE STUINFO GO

ALTER PROC Proc_score WITH RECOMPILE AS

SELECT S_number,score FROM t_score

WHERE C_number='1' (3)删除上述创建的存储过程

DROP PROC Proc_score,Proc_list,ProcAvgScore 思考与练习:

1、USE STUINFO

GO

18

CREATE PROC insert_tri @Cnum Char (4), @Cname char (16),

@Teacher char (10) =NULL, @Hours int,

@Credit int =NULL AS

IF @Cnum IS NULL OR @Cname IS NULL OR @Hours IS NULL BEGIN

PRINT '你必须提供课程号,课程名,课程学时!' PRINT '(授课教师,学分可以为空。)' RETURN END

BEGIN TRANSACTION

INSERT t_course (C_number,C_name, Teacher, Hours, Credit) VALUES (@Cnum,@Cname,@Teacher,@Hours,@Credit) IF @@error <> 0 BEGIN ROLLBACK TRAN RETURN END

PRINT '新课程已经添加' COMMIT TRANSACTION GO

2、USE STUINFO GO

CREATE PROC GetCredit @Sno char(8), @cname char(16),

@score real OUTPUT, @GetCredit int OUTPUT AS

SELECT @score =score, @GetCredit =CASE WHEN score <60 THEN 0 ELSE Credit END

FROM t_course JOIN t_score ON t_course.C_number=t_score.C_number WHERE t_score.S_number=@Sno AND C_name=@cname --执行存储过程

19

DECLARE @score real,@GetCredit int

EXEC GetCredit '2004001','SQL Server程序设计', @score OUTPUT,@GetCredit

OUTPUT

PRINT '成绩='+CONVERT(varchar(6),@score)+' ,所获学分='+CONVERT

(char(2), @GetCredit)

实验八 思考与练习

1、USE STUINFO

GO

CREATE TRIGGER Score_update2 ON t_course FOR UPDATE AS

IF UPDATE(credit) BEGIN

RAISERROR('禁止用户修改credit列!',10,1) ROLLBACK TRANSACTION END

2、USE STUINFO

GO

CREATE TRIGGER Delete_score ON t_course FOR DELETE AS BEGIN

DELETE t_score FROM t_score, deleted

WHERE t_score.C_number=deleted.C_number END

3、USE STUINFO

GO

CREATE TRIGGER tri_insert ON t_score FOR INSERT AS BEGIN

DECLARE @credit int,@score real SELECT @score=score FROM inserted

20


SQL SERVER 2000实用教程习题及实验参考答案(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:辩论材料真才实学比人际关系更重要

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: