数据库sql问题?

来源:百度知道 编辑:UC知道 时间:2024/05/28 00:42:48
用存储过程完成:查询选修了全部课程(或某个同学选修的课程)的同学的学号和姓名
步骤一、建立临时结果表
CREATE Table Result (sno char(10) primary key(sno) ,
sname varchar(20))
步骤二 、建立存储过程
CREATE procedure 存储过程名称 AS
DECLARE cur_sno cursor for
select sno,sname from Student
DECLARE cur_cno cursor for select cno from SC
where sno= 参数
BEGIN
DECLARE @num int,@v_sno char(10),@v_cno char(10),@v_sname varchar(20),@flag int
OPEN cur_sno
FETCH NEXT FROM cur_sno into @v_sno,@v_sname
WHILE (@@FETCH_STATUS=0)
BEGIN
OPEN cur_cno
。。。
FETCH NEXT FROM cur_cno into @v_cno
WHILE (@@FETCH_STATUS=0)
BEGIN
。。。
FETCH NEXT FROM cur_cno into @v_cno
END
。。。
INSERT Result(sno,sname) VALUES(@v_sno,@v_sname)
。。。
步骤三、执行存储过程 EXEC 存储过程名称 '95001

中间的…………不会写?

嵌套游标不是你这样用的。用你的代码给你改下:
CREATE procedure 存储过程名称
@p_someone char(10)/*某个同学的学号,就是你的那个参数,这个是外面传进来的。*/
AS
BEGIN
DECLARE @num int
DECLARE @v_sno char(10)
DECLARE @v_cno char(10)
DECLARE @v_sname varchar(20)
DECLARE @flag int

DELETE FROM Result;
/*如果@p_someone为''则@num为所有课程的数量;否则@num是某个同学所选修的课程的数量*/
IF @p_someone=''
SELECT @num=count(*) FROM C/*课程名表,就是(课程号,课程名字)那个表*/
ELSE
SELECT @num=count(*) FROM SC WHERE sno=@p_someone;/*课程名表,就是(课程号,课程名字)那个表*/
DECLARE cur_sno cursor for
select sno,sname from Student;
OPEN cur_sno
FETCH NEXT FROM cur_sno into @v_sno,@v_sname
WHILE (@@FETCH_STATUS=0)
BEGIN
IF @p_someone=''
BEGIN
IF (SELECT count(*) FROM SC WHERE sno=@v_sno)=@num/*选修全部课程的同学*/
INSERT INTO Result(sno,sname) VALUES(@v_sno,@v_sname);
END<