SQL SERVER 2000实用教程习题及实验参考答案
更新时间:2024-06-23 20:53:01 阅读量: 综合文库 文档下载
- sql server推荐度:
- 相关推荐
习题参考答案
第一章
1、SQL Server 2000有七种不同的可用版本:企业版、企业评估版、标准版、开发版、个人版、Windows CE版和桌面引擎版。
2、Microsoft Windows NT Server 4.0、Microsoft Windows NT Server 4.0 企业版、Windows 2000 Server、Windows 2000 Advanced Server 和 Windows 2000 Data Center Server
第二章
1、C 2、A
3、Exec sp_addtype New_str,'Varchar(12)', 'Not Null '
第三章
1. 数据文件、事务日志、mdf、ldf。 2. CREATE DATABASE。 3. SP_HELPDB.
4. ALTER DATABASE.。
5. DBCC SHRINKFILE、DBCC SHRINKDATABASE。 6. SP_DBOPTION。 7. DROP DATABASE。 8. SP_DETACH。
9. 带FOR ATTACH子句的CREATE DATABASE语句。 10. CREATE TABLE。 11. ALTER TABLE。 12. DROP TABLE。 13. INSERT。 14. UPDATE。 15. DELETE。
16.约束定义了关于允许什么数据进入数据库的规则。约束有五种类型,分别是 PRIMARY KEY约束、FOREIGN KEY约束、UNION约束、CHECK约束、DEFAULT约束。约束的作用是防止列出现非法数据,以保证数据库中数据的一致性和完整性。
17.
(1) DELETE E2 FROM E2, E1
WHERE E2.编号 IN (SELECT 编号 FROM E1) (2) INSERT INTO E1 SELECT * FROM E2
18. UPDATE G1 SET G1.数量= G1.数量+ G2.数量 FROM G1, G2
1
WHERE G1.编号= G2.编号 GO
INSERT INTO G1
SELECT * FROM G2 WHERE NOT (G2.编号 IN (SELECT 编号 FROM G1))
第四章
1. A、B、D 2.B、C、D 3.
(1)程序为:SELECT top 6 * FROM goods
(2)程序为:SELECT 商品名称,进货价 FROM goods ORDER BY 进货价 DESC (3)程序为:SELECT 商品名称,零售价,进货价,剩余数量
FROM goods INNER JOIN sell ON goods.商品编号=sell.商品编号
(4)程序为:SELECT 商品编号,数量,零售价 FROM goods
COMPUTE AVG(零售价)
(5)程序为:SELECT 商品名称,goods.数量,售出时间 FROM goods,sell
WHERE 售出时间 between '2004.1.1'AND '2005.1.1' and goods.商品编号=sell.商品编号
(6)程序为:SELECT * FROM employees
WHERE 编号=ANY (SELECT 售货员工编号 FROM sell) SELECT 售货员工编号,商品编号,数量
FROM sell order by 售货员工编号 COMPUTE SUM(数量) BY 售货员工编号 (7)程序为:SELECT 商品名称,goods.数量,剩余数量 FROM goods,sell
WHERE goods.商品编号=sell.商品编号 and 商品名称 LIKE '%显示器%'
(8)程序为:SELECT SUM(sell.数量) as 打印机销售数量 FROM sell,goods
WHERE sell.商品编号=goods.商品编号 and 商品名称='打印机'
第五章
1. C 2. D
3.答:索引是一个单独的,物理的数据库结构。它由某个表中的一列或者若干列的值,以及这些值的记录在数据表中存储位置的物理地址所组成。使用索引可以极大的改善数据库的性能,加快数据查找速度。但是,索引也会消耗硬盘空间并招致开销和维护成本。
4.答:设置索引的原则是:在主键上创建索引;在经常需要检索的字段上创建索引;在外键上创建索引;在经常要排序的列上创建索引。
5.答:按照存储结构划分,索引分为聚集索引和非聚集索引。
在聚集索引中,表中各行的物理顺序与索引中行的物理顺序是相同,创建任何非聚集索引之前要首先创建聚集索引,聚集索引需要将表中的所有数据完全重新排列;而聚集索引不会改变表中数据行的物理存储位置和顺序,它只包含索引值和指向数据行的指
2
针。
6.答:数据完整性是指存储在数据库中的数据的一致性和准确性。数据完整性有3中类型:域完整性、实体完整性和参照完整性。
约束确保在数据中输入有效的数据值,是强制数据完整性的首选方法。
第六章
1. C 2. B 3.视图
4.对视图的定义进行加密
强制视图上执行的所有数据修改语句都必须符合由 select_statement 设置的准则。 5.判断题 √、×、√ 第7章
1、系统,用户 2、符号,运算符
3、B 4、B、C
5、批处理就是单个或多个Transact-SQL语句的集合,由应用程序一次性发送给SQL Server解释并执行批处理内的所有语句指令。批处理的结束标志是GO。建立批处理要注意:
(1) CREATE DEFAULT、CREATE RULE、CREATE VIEW、CREATE PROCEDURE、和CREATE TRIGGER语句,只能在单独的批处理中执行。
(2) 将默认值和规则绑定到表字段或用户自定义数据类型上之后,不能立即在同一个批处理中使用它们。
(3) 定义一个CHECK约束之后,不能立即在同一个批处理中使用这个约束。 (4) 修改表中的字段名之后,不能立即在同一个批处理中使用这个新字段名。 (5) 用户定义的局部变量的作用范围局限于一个批处理内,并且在CO命令后不能再引用这个变量。
(6) 如果一个批处理中的第一条语句是执行某存储过程的EXEC语句,则EXEC关键字可以省略不写;如果不是批处理的第一条语句,则EXEC关键字必须要有。
6、在使用局部变量以前,必须使用DECLARE语句来声明这个局部变量。语法格式为:DECLARE @局部变量名 数据类型[,…n]
给局部变量赋值有两种方法,可以使用SET语句赋值,也可以使用SELECT语句赋值。
使用SET语句赋值的语法格式为:SET @局部变量名=表达式[,…n]
使用SELECT语句赋值的语法格式为:SELECT @局部变量名=表达式[,…n] 7、使用游标要遵循以下顺序:
声明游标→打开游标→读取数据→关闭游标→删除游标
3
8、 DECLARE @srv varchar(20) SET @srv= @@servername PRINT @srv
9、DECLARE @Today DATETIME
SET @Today=GETDATE( )
SELECT YEAR(@Today) AS 年,MONTH(@Today) AS 月,DAY(@Today) AS 日 10、 USE STUINFO
GO
DECLARE @Stuname char(8) SET @Stuname ='张三'
IF EXISTS(SELECT * FROM t_student WHERE S_name=@stuname)
BEGIN
PRINT @stuname+'的信息如下:'
SELECT * FROM t_student WHERE S_name=@stuname END
ELSE
BEGIN
PRINT '在数据库中无此人信息!' END
GO
11、 USE STUINFO
GO
SELECT S_number, score,折合成绩=
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 t_score JOIN t_course ON t_score.C_number=t_course.C_number WHERE C_name='SQL Server程序设计' GO
12、 USE STUINFO
GO
--声明游标
DECLARE Stu_cursor CURSOR
FOR
4
SELECT * FROM t_student FOR READ ONLY --打开游标
OPEN Stu_cursor
--第一次读取,得到结果集的首行记录 FETCH NEXT FROM Stu_cursor --循环读取结果集中剩余的数据行 WHILE @@FETCH_STATUS=0 BEGIN
FETCH NEXT FROM Stu_cursor END
--关闭游标
CLOSE Stu_cursor --释放(删除)游标
DEALLOCATE Stu_cursor GO
13、 USE STUINFO
GO
DECLARE @score real --声明一个可更新的游标
DECLARE Stu_score CURSOR KEYSET FOR SELECT score FROM t_score
WHERE S_number= '2004016' AND C_number= '001'
FOR UPDATE OPEN Stu_score
FETCH ABSOLUTE 1 FROM Stu_score INTO @score
PRINT '修改前的成绩是:'+CONVERT(Varchar(6),@score) --通过游标修改数据 UPDATE t_score SET score= score+5
WHERE CURRENT OF Stu_score
FETCH ABSOLUTE 1 FROM Stu_score INTO @score
PRINT '修改后的成绩是:'+CONVERT(Varchar(6),@score) --关闭游标
CLOSE Stu_score --释放(删除)游标
DEALLOCATE Stu_score GO
5
第8章
1、 执行存储过程,字符串变量 2、A、D
3、存储过程与存储在客户计算机的本地T-SQL语句相比,它具有如下优点: 存储过程在服务器端运行,而且存储过程是预编译的,执行速度快。如果某个操作需要大量的T-SQL语句或重复执行,那么使用存储过程比直接使用T-SQL语句执行得更快。
用户可以通过发送一条执行存储过程的语句实现一个复杂的操作,而不需要在网络上发送几百条T-SQL语句,这样可以减少在网络流量
使用存储过程可以增强代码的重用性和共享性,存储过程在被创建后,可以在程序中被多次调用,而不必重新编写。
4、SQL Server支持五种类型的存储过程:系统存储过程、本地存储过程、临时存储过程、远程存储过程、扩展存储过程。 5、USE Sales
GO
CREATE PROC proc_find @goodname Varchar(20) AS
IF EXISTS(SELECT * FROM Goods WHERE 商品名称=@goodname) RETURN 1 ELSE RETURN 0 6、在Sales数据库中建立一个名为date_to_date_sales的存储过程:该存储过程将返回在两个指定日期之间的所有销售记录。
USE Sales GO
CREATE PROC date_to_date_sales @StartDate datetime, @EndDate datetime AS
SELECT * FROM sell
WHERE 售出时间 BETWEEN @StartDate AND @EndDate
第9章
1、inserted,UPDATE,DELETE 2、D
3、触发器是一种与数据表紧密关联的特殊的存储过程,当该数据表有插入(INSERT)、更改(UPDATE)或删除(DELETE)事件发生时,所设置的触发器就会自动被执行,以进行维护数据完整性,或其他一些特殊的数据处理工作。触发器分为AFTER
6
触发器和INSTEAD OF 触发器两种类型。
4、USE Sales GO
CREATE TRIGGER tri_ReportGoods ON Goods FOR UPDATE AS
IF UPDATE(数量) BEGIN
IF (SELECT MIN(数量) FROM deleted ) <5
PRINT '有商品库存低于5件,请核查,速进货!' END
5、USE Sales GO
CREATE TRIGGER tri_GoodsCount ON Sell FOR INSERT AS BEGIN
DECLARE @GoodNO int,@Sellnum int
SELECT @GoodNO=商品编号, @Sellnum=数量 FROM inserted UPDATE Goods
SET 数量=数量-@Sellnum WHERE 商品编号=@GoodNO END
第十章
1、
(1)定义函数
在查询分析器中运行以下命令: USE Sales GO
CREATE FUNCTION Fn_Sell (@bt DateTime) RETURNS TABLE AS
RETURN
(SELECT Goods.商品名称,Sell.数量 FROM Goods,Sell
7
WHERE (Sell.售出时间=@bt AND Goods.商品编号=Sell.商品编号) ) (2)测试
在查询分析器中运行以下命令:
SELECT * FROM dbo.Fn_Sell('2005-6-5') 2、
(1)定义函数
在查询分析器中运行以下命令: USE Sales GO
CREATE FUNCTION Fn_DateTotal (@m Int)
RETURNS @Fn_DateTotal TABLE
(日期 DateTime PRIMARY KEY NOT NULL, 日销售额 Money NOT NULL ) AS
BEGIN
INSERT @Fn_DateTotal
SELECT Sell.售出时间 AS 日期,SUM(Sell.数量*Goods.零售价) AS 日销售额 FROM Sell,Goods
WHERE (MONTH(Sell.售出时间)=@m AND Sell.商品编号=Goods.商品编号) GROUP BY Sell.售出时间 RETURN END (2)测试
在查询分析器中运行以下命令:
SELECT * FROM dbo.Fn_DateTotal(6) 返回结果是6月份销售统计结果。 在查询分析器中运行以下命令: Declare @err Int USE Sales
BEGIN TRANSACTION
UPDATE T1 SET T1.数量= T1.数量+ GG.数量 FROM T1,GG
WHERE T1.编号= GG.编号 SELECT @err=@@error IF @err!=0
--更新失败,回滚所有操作
8
BEGIN
ROLLBACK TRANSACTION RETURN END
INSERT T1
SELECT * FROM GG
WHERE NOT (编号 IN (SELECT 编号 FROM T1)) SELECT @err=@@error IF @err!=0
--更新失败,回滚所有操作 BEGIN
ROLLBACK TRANSACTION RETURN END
COMMIT TRANSACTION 3、
在查询分析器中运行以下命令: Declare @err Int USE Sales
BEGIN TRANSACTION
UPDATE T1 SET T1.数量= T1.数量+ GG.数量 FROM T1,GG
WHERE T1.编号= GG.编号 SELECT @err=@@error IF @err!=0
--更新失败,回滚所有操作 BEGIN
ROLLBACK TRANSACTION RETURN END
INSERT T1
SELECT * FROM GG
WHERE NOT (编号 IN (SELECT 编号 FROM SELECT @err=@@error IF @err!=0
--更新失败,回滚所有操作 BEGIN
ROLLBACK TRANSACTION RETURN
9
T1)) END
COMMIT TRANSACTION
实验参考答案
实验二
1.
CREATE DATABASE StuInfo ON
PRIMARY (NAME = StuInfo _Data,, FILENAME = 'D:\\ StuInfo _Data.Mdf', SIZE =2MB,
MAXSIZE = 10MB, FILEGROWTH =1 MB) LOG ON
(NAME = StuInfo _Log ,
FILENAME = 'D:\\ StuInfo _Log.Ldf', SIZE = 1MB,
MAXSIZE =5MB,
FILEGROWTH = 1MB) GO
2.
USE StuInfo GO
--创建学生表T_Student CREATE TABLE T_Student_
( S_Number Char(8) NOT NULL
CONSTRAINT PK_ S_Number PRIMARY KEY CLUSTERED ,
S_Name Char(10) NOT NULL, Sex Char(2) NULL,
Birthday DateTime NOT NULL, ) GO
--创建课程表T_Course CREATE TABLE T_Course
( C_Number Char(4) NOT NULL
10
CONSTRAINT PK_ C_Number PRIMARY KEY CLUSTERED,
C_Name Char(16) NOT NULL , Teacher Char(10) NULL, Hours Int NOT NULL, Credit Int NULL ) GO
--创建课程表T_Score CREATE TABLE T_Score
(S_Number Char(8) NOT NULL
CONSTRAINT FK_S_Number FOREIGN KEY (S_Number) REFERENCES T_Student (S_Number),
C_Number Char(4) NOT NULL
CONSTRAINT PK_SC_Number PRIMARY KEY (S_Number, C_Number)
CONSTRAINT FK_C_Number FOREIGN KEY (C_Number) REFERENCES T_Course (C_Number),
Score Real NULL )
3.在企业管理器中打开表,按照表5-4、5-5、5-6的内容直接输入数据即可。 4.显示错误信息,不能保存该条记录。因为T_Score表的S_Number列与表T_Student的S_Number列存在着外键约束关系,而表T_Student不存在S_Number为20030103的记录。
5. 显示错误信息,不能保存该条记录。因为T_Score表的C_Number列与表T_Course的C_Number列存在着外键约束关系,而表T_Course不存在C_Number为3002的记录。
6. 显示错误信息,不能保存该条记录。因为T_Score表的S_Number列与表T_Student的S_Number列存在着外键约束关系,而表T_Student不存在S_Number为20030105的记录。
7. 显示错误信息,不能删除该条记录。因为T_Score表的C_Number列与表
T_Course的C_Number列存在着外键约束关系,为保证表T_Score数据的完整性,不能删除表T_Course中C_Number为3001的记录。
8.首先删除T_Score表中C_Number=’3001’的所有记录,然后再删除表T_Course中C_Number为3001的记录。
9.
在查询分析器输入如下命令:
EXEC SP_DETACH_DB 'StuInfo', 'true'
单击工具栏中的“运行”按钮,返回“命令已成功完成”的信息,说明已成功分离数据库。
在附加数据库前,将上面分离出来的数据库文件'StuInfo _Data.Mdf、
11
'StuInfo_Log.Ldf复制到另一台计算机的C:\\。然后在查询分析器中运行如下命令: CREATE DATABASE StuInfo ON
PRIMARY (NAME= 'StuInfo_Data', FILENAME = 'C:\\ StuInfo_Data.Mdf' )
LOG ON
(NAME='StuInfo_Log',
FILENAME = 'C:\\ StuInfo_Log.Ldf') FOR ATTACH GO
实验三
1. 查询所有男学生的姓名、出生日期、年龄。
use stuinfo go
Select s_name,birthday, year(getdate())-year(birthday) 年龄 from t_student Where sex='男'
2. 查询所有女学生详细信息和女学生的总人数。
use stuinfo go
select *,count(sex) 人数 from t_student
group by s_number,birthday,sex,s_name having sex='女' compute sum(count(sex))
3. 查询SQL Server课程的总成绩、平均成绩、及格学生人数和不及格学生人数。
use stuinfo go
select t_course.c_name 课程名称,t_score.score 成绩 from t_course,t_score
where t_course.c_number=t_score.c_number and c_name='SQL Server' compute avg(score) compute sum(score) go
select count(*) 'sql server及格学生人数' from t_score where score>=60 and c_number='1'
select count(*) 'sql server不及格学生人数' from t_score where score<60 and c_number='1'
12
4. 分别查询sql server课程所有男生成绩,总分、平均分和所有女生的成绩、总分、平均分。
use stuinfo go
select t_student.s_name 姓名,t_student.sex 性别, t_course.c_name 课程名称,t_score.score 成绩 from t_student,t_course,t_score
where t_course.c_number=t_score.c_number and t_student.s_number=t_score.s_number and c_name='sql server' and t_student.sex='男' compute avg(score) compute sum(score) go
select t_student.s_name 姓名,t_student.sex 性别, t_course.c_name 课程名称,t_score.score 成绩 from t_student,t_course,t_score
where t_course.c_number=t_score.c_number and t_student.s_number=t_score.s_number and c_name='sql server' and t_student.sex='女' compute avg(score) compute sum(score)
5. 查询所有姓李的男学生的选修课程和成绩。
Use stuinfo Go
Select t_student.s_name 姓名,t_student.sex 性别, t_course.c_name 课程名称,t_score.score 成绩 From t_student, t_course, t_score
Where t_student.s_number=t_score.s_number and
t_score.c_number=t_course.c_number and s_name like '李%' and sex='男'
6. 查询所有不及格学生的姓名、不及格课程和不及格课程的成绩。
Use stuinfo Go
Select t_student.s_name,t_course.c_name,t_score.score From t_student,t_course,t_score
Where t_student.s_number=t_score.s_number and t_score.c_number=t_course.c_number and score<60
7. 按男同学进行分组。
Use stuinfo Go
13
Select * from t_student
Group by s_number, s_name, birthday,sex having sex='男'
8. 将t_student表中的前40%条记录在s_number,s_name,polity字段上的值插入到新表t_student1中。
Use stuinfo Go
Select top 40 percent s_number,s_name into t_student1 from t_student
Select * from t_student2
实验四
1. 分别利用企业管理器和创建索引向导为t_score表的score字段建立非聚集索引,索引名为i_score,并按降序排序。(略)
2. 利用transact sql语句新建一个数据表t_user,要求使用CREATE INDEX语句为U_id字段创建一个唯一性聚集索引,索引名为i_id。
第二题代码:
use stuinfo go
create table t_user ( U_id char(10) not null, U_name char(20),
U_password char(10) dafault ‘000000’, U_popedom char(20) )
create unique clustered index i_id on t_user(U_id)
3. 使用SQL语句为t_score表的s_number、c_number字段创建一个复合索引,索引名为i_t_score。设置填充因子为40,指定过期的索引统计不自动重新计算。
第三题程序为:
use stuinfo go
create index i_t_score on t_user(s_number、c_number) WITH PAD_INDEX, FILLFACTOR=50, STATISTICS_NORECOMPUTE
4. 使用存储过程将上题中建立的索引i_t_score重命名为index_s_c。 第四题源代码:sp_rename i_t_score,index_s_c
5. 分别使用企业管理器和SQL语句两种方法删除索引index_s_c。
14
第五题程序为:drop index index_s_c
实验五
1、如何为“姓名”字段添加一个唯一性约束?代码如下:
use student2 go
ALTER TABLE 基本表
ADD CONSTRAINT IX_E UNIQUE (姓名) GO
2、利用T-SQL语句创建一个名为“课程信息表” 的表,代码如下:
use student2 go
create table课程信息表 (
课程编号 char(10) not null primary key, 课程名 char(30), 学时 int,
学分 real default '4' )
go
3. 利用T-SQL语句创建一个名为“学生成绩表”的表,代码如下:
use student2 go
create table 学生成绩表( 学号 char(10) not null, 课程编号 char(10) not null, 分数 real,
constraint pk_s primary key (学号, 课程编号), constraint chk_score check (分数>0 and 分数<100), constraint con_num references 课程信息表(课程编号)
) go
4. 如何使用“alter table……add”命令为“课程名”字段增加唯一性约束。
use student2 go
alter table 课程信息表
add constraint uk_c unique(课程名) go
5. 如何使用命令删除学生成绩表中的一个外键约束,代码如下:
15
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
SELECT @credit=t_course.credit FROM t_course,inserted WHERE t_course.C_number= inserted.C_number IF @score>=60 BEGIN
UPDATE t_score SET credit=@credit FROM t_score,inserted
WHERE t_score.S_number=inserted.S_number END END
实验九
1、
在查询分析器中运行以下命令: USE Stuinfo GO
CREATE FUNCTION Fn_Grad (@ClassNo Char(6))
RETURNS @Fn_Grad TABLE
(课程编号 Char(4) PRIMARY KEY NOT NULL, 平均成绩 Decimal(6,2) NOT NULL ) AS BEGIN
INSERT @Fn_Grad
SELECT C_Number AS 课程编号,AVG(score) AS 平均成绩 FROM T_Score
WHERE (LEFT(S_Number,6)=@ClassNo) GROUP BY C_Number RETURN END (2)测试
在查询分析器中运行以下命令: SELECT * FROM dbo.Fn_Grad('200301') 返回结果是200301班的成绩统计结果。 2、
在查询分析器中运行以下命令: Declare @err Int
21
USE Sales
BEGIN TRANSACTION
UPDATE T1 SET T1.数量= T1.数量+ GG.数量 FROM T1,GG
WHERE T1.编号= GG.编号 SELECT @err=@@error IF @err!=0
--更新失败,回滚所有操作 BEGIN
ROLLBACK TRANSACTION RETURN END
INSERT T1
SELECT * FROM GG
WHERE NOT (编号 IN (SELECT SELECT @err=@@error IF @err!=0
--更新失败,回滚所有操作 BEGIN
ROLLBACK TRANSACTION RETURN END
COMMIT TRANSACTION 22
编号 FROM T1))
正在阅读:
SQL SERVER 2000实用教程习题及实验参考答案06-23
《红岩》测试题(有答案)05-23
同一种调调02-14
机械制图8套试卷及答案(1)08-13
国贸案例答案03-15
高中运动会广播稿02-23
定时训练-原电池01-16
农民竞赛07-07
同心同德06-15
必修一情景默写11-14
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 习题
- 答案
- 参考
- 实验
- 实用
- 教程
- SERVER
- 2000
- SQL
- 长沙市2017年小学毕业语文质量检测试卷
- 软件工程第二版答案
- 亦庄新城规划 2005-2020
- 1:100万土壤数据说明
- 广中医推拿复习提纲整理
- 《营业部经理晋升培训手册》第一章:管理篇
- 民族地区旅游资源所有权与经营权分离的问题及对策
- 四年级语文公开课导学案B钢城区(2)
- 电子有限公司安全预评价报告
- 抽屉原理教学设计
- 国电建投施工现场用水用电管理办法
- 感恩励志培训
- 儿科学期末考试资料总结
- 内蒙古赤通鲁公路建设项目底基层分项开工报告
- 立轴混流式水轮机的安装-水电站课程设计
- 桥门式起重机司机模拟试题二
- 北师大版高中数学必修4全册表格式导学案
- 历年南京师范大学各专业录取名单汇总-南师大考研录取名单哪里找
- 形义字、全表义理据字、全表音理据字
- 王胜华同志在全区纪律作风集中整顿活动暨两风建设工作会议上的讲