当前位置:首页 » 服务存储 » 存储过程修改学生课程信息
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

存储过程修改学生课程信息

发布时间: 2023-05-17 22:27:39

‘壹’ 编写存储过程,在学生表,课程表,插入记录,插入该同学选修1号课程的记录,同时,删除课程表中除1号课程外

-- create table s_student(s_id int not null,---学号
-- s_sysname char(10) ,---系名
-- s_techname char(10),---专业名
-- s_name char(10),----姓名
-- s_age int,
-- s_sex char(1),
-- s_tel char(13),
-- s_address varchar(100),
-- s_email char(24),
-- primary key(s_id)
-- )
-- go
-- create table s_class
-- ( s_cid char(10) not null,
-- s_sid char(10) not null,
-- s_classname char(10),
-- s_teacher char(15),
-- s_classhour int,
-- primary key (s_sid,s_cid)
-- )
-- go
-- alter table dbo.s_student add s_class char(10) null
-- go
---编写存储过程,在学生表和课程表中插入记录,穗银插入该同学选修1号课程的记录,同时,删除课程裱中除一号课程外的
-- 所有记录,存储过程的输入参数为:学号,姓名,性别,年龄,系名,年级
create procere p_studentandclass
@sid char(10),
@sname char(10),
@ssex char(1),
@sage int,
@ssys char(10),
@sclass char(10)
AS
INSERT INTO dbo.s_student (s_id ,
s_sysname ,
s_techname,
s_name ,
s_age ,
s_sex ,
s_tel,
s_address ,
s_email,s_class)
values(@sid,
@ssys,
'',
@sname,
@sage,
@ssex,
'',
'',
'或搜',
@sclass)
declare @i int,@classname char(10),@teacher char(15),@classhour int
select @i = 1 ,@classname = '',@teacher = '',@classhour = 0
while @i <= 10
BEGIN
IF @i = 1
BEGIN
SELECT @classname ='羽毛球',@teacher ='杨先生',@classhour = 10
END
ELSE IF @i = 2
BEGIN
SELECT @classname ='乒乓球',@teacher ='杨先生',@classhour = 10
END
ELSE IF @i = 3
BEGIN
SELECT @classname ='桌球',@teacher ='刘先生',@classhour = 10
END
ELSE IF @i = 4
BEGIN
SELECT @classname ='篮球',@teacher ='戴先生',@classhour = 10
END
ELSE IF @i = 5
BEGIN
SELECT @classname ='排球',@teacher ='孙先生',@classhour = 10
END
ELSE IF @i = 6
BEGIN
SELECT @classname ='足球',@teacher ='易先生',@classhour = 10
END
ELSE IF @i = 7
BEGIN
SELECT @classname ='花球',@teacher ='黄先生',@classhour = 10
END
ELSE IF @i = 8
BEGIN
SELECT @classname ='跳环',@teacher ='沈先生',@classhour = 10
END
ELSE IF @i = 9
BEGIN
SELECT @classname ='高低杆猜团宴',@teacher ='周先生',@classhour = 10
END
ELSE IF @i =10
BEGIN
SELECT @classname ='跳水',@teacher ='曹先生',@classhour = 10
END
INSERT INTO dbo.s_class ( s_cid,
s_sid ,
s_classname ,
s_teacher ,
s_classhour)
values
(convert(char(10),@i),
@sid,
@classname,@teacher,
@classhour)
select @i = @i +1
END
delete from dbo.s_class where s_sid = @sid and s_cid <> '1'

select *
from dbo.s_student a,
dbo.s_class b
where a.s_id = b.s_sid

go

grant exec on p_studentandclass to public

go

你自己运行下就知道了

‘贰’ 创建一个触发器,当修改学生课程成绩时,自动将相关信息写入GradeChange表

1、创建一个带有输入参数和输出的存储过程p_kh,返回指定教师(作为输入参数)所授课程的课程号(作为输出参数)。

‘叁’ 在存储过程proc_8_t1进行修改,产生学分为‘4’的课程学生选课情况列表,其中包括课程号、课程名、学分。

create procere proc_8_t1
as
begin
select student.sno,student.sname,student.sex,student.deptno,student.age,sc.cno,course.cname,student.birthday from student,sc,course where sc.cno in(select cno from sc where cno in(select cno from course where credit=4))and (student.sno=sc.sno) and( sc.cno=course.cno)
end;
CREATE PROCEDURE proc_8_t3
@sno2 int
AS
DECLARE @sum tinyint
SELECT @sum = sum(credit) from course,sc where course.cno=sc.cno and sc.sno=@sno2 group by sc.sno
IF @sum>=9
PRINT '此配枝学生学分不轮顷足!'培桐敏
ELSE
PRINT '此学生学分已足!'

‘肆’ --存储过程,输入学号,能输出学生的所有选课信息

这首好唯句“者培exec in_GetDataByScore 0001”
改为
“ exec in_GetDataByScore '0001' ”
或者改为
“袜派 exec in_GetDataByScore @StuNo='0001' ”

‘伍’ t-sql语句:编写一个存储过程p-3,修改课程表中课程名称,带两个参数

create proc p1(@原课程碰核名 varchar(20),@新课程名 varchar(20)) as
update 课仔御程表 set 课程名=@新课程名念吵岩 where 课程名=@原课程名

‘陆’ sql存储过程

创建一个存储过程(insertResult)添加学生成绩,要求输入(学号,课程名,分数)
如果输入的学号不存在,则提示“学生基本信息表中不存在此学号,请检查后重新输入”
如果输入的课程不存在,则提示“还没有这门课程,老答请检查后重新输入”
如果该学生的专业中没有输入的课程,则提示“该学生的专业里面没有这门课”
判断输入侍弊慧的成绩是否是大于0,如果小于0则提示“你太狠了吧,竟然打负分!”
判断该学生的课程成绩是否已经存在,如果存在则提示“此学生的这门课程成绩已经录入了,请不要重复录入”
最后添加成功则提示“成绩添加成功”

CREATE PROCEDURE [dbo].[insertResult]
(
@nStudentNo int, ------------------------学号
@vchCourse varchar(32), ----------------课程
@nAchievement int -------------------------成绩
)

AS

SET NOCOUNT ON

--table_student_base_info为学生基本信息表,列student_no为学号,student_specialty为专业课名称,student_achievement为专业课成绩
--table_course为课程表, 列course_name为课程名

DECLARE @nCount int SET @nCount = 0
DECLARE @nSpecialty SET @nSpecialty = 0
DECLARE @nCourse SET @nCourse = 0
DECLARE @nExistAchievement SET @bIsMark = 0

--------------------------------------------------判断学号是否存在
SELECT
@nCountNo = COUNT(*)
FROM
table_student_base_info
WHERE
table_student_base_info.student_no = @nStudentNo

IF @nCount < 1
BEGIN
PRINT '学生基本信息表中不存在此学号,请检查后重新输入'
RETURN
END

------------------------------------------------判断专业课及成绩
SELECT
@nSpecialty = COUNT(*),
@nExistAchievement = student_achievement
FROM
table_student_base_info
WHERE
table_student_base_info.student_specialty = @vchCourse

IF @nSpecialty < 1
BEGIN
PRINT '该学生的专业里面没有这门课'
RETURN
END

IF @nExistAchievement >= 0
BEGIN
PRINT '此学生的这门课程成绩已经录入了,请不要重复录入'
RETURN
END

------------------------------------------------判断指定课程
SELECT
@nCourse = course_name
FROM
table_course
WHERE
course_name = @vchCourse

IF @nCourse < 1
BEGIN
PRINT '还没有这门课程,请检查后重新输卜粗入'
RETURN
END

----------------------------------------------成绩为负
IF @nAchievement < 0
BEGIN
PRINT '你太狠了吧,竟然打负分!'
RETURN
END

----------------------------------------------录入成绩
UPDATE
table_student_base_info
SET
student_achievement = @nAchievement
WHERE
table_student_base_info.student_no = @nStudentNo

PRINT '成绩添加成功'

‘柒’ 创建存储过程,输入@学号@课程编号@成绩向成绩表插入记录,若存在相同学号与课程号,则修改记录成绩

CREATEPROCEDUREsp_Score
(
手空@snoNVARCHAR(50)
,@cnoNVARCHAR(50)
,@scoreDECIMAL(10,4)
)AS
BEGIN
IFEXISTS(SELECT1FROM[成绩表]WHERE[学号字段]=@snoAND[课程字段]=@cno)
UPDATE[成绩表]
SET[成绩字段]=@score
凳薯则WHERE[学号字段]=@snoAND[课程字段]=@cno
枣棚ELSE
INSERTINTO[成绩表]([学号字段],[课程字段],[成绩字段])
VALUES(@sno,@cno,@score)
END

‘捌’ 用sql语句 创建一个修改特定学号学生成绩的存储过程

---假定变量xuehao为学号,启蠢羡kecheng为课程,chengji为成绩悄拍,表名称为mytable。
CREATEPROCEDUREUpdateScore
(
@xuehaovarchar(20),
@kechengvarchar(50),
@chengjivarchar(5)
)
AS
SETNOCOUNTOFF;
UPDATEmytableSETchengji=@chengji
WHERE档燃(xuehao=@xuehao)AND(kecheng=@kecheng)
GO

‘玖’ 编写一个存储过程实现对表数据的删除 修改和添加!(sql server数据库)

1、使用账户和密码,连接到自己的数据库。

‘拾’ 创建学生-课程数据库,编写存储过程,完成以下功能:

主要问题是存储过程主体缺少begin 和 end 语句,使得后面的测试语句也被编译成了存储过程的主体,从而造成了递归(存储过程调用自己)。
alter procere 学生信息
@snum varchar(4),
@AvgScore int OUTPUT,
@CourseNum int OUTPUT,
@NotpassNum int OUTPUT
AS
BEGIN
Select @AvgScore = Avg(Score) From SC Where SC.snum = @snum
Select @CourseNum = Count(*) From SC Where SC.snum = @snum
Select @NotpassNum = Count(*) From SC Where SC.snum = @snum and score<60
END

另外,分号是SQL语句的结束符,不明白为什么有存储过程名后面会紧跟着一个分号。