Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Курсоры в SQL  [new]
kuralesya
Member

Откуда:
Сообщений: 1
Используя курсор, определите студентов указанной группы, имеющих высокий средний балл по результатам экзаменов
Порядок выполнения:
1) Для этого задания создайте курсор с данными о студентах и их средних баллах.
2) Введите n  нужное количество студентов с высоким показателем.
3) Создайте в курсоре цикл для выборки фамилий и результатов n студен-тов с средним баллом.
4) Сохраните их во временной таблице TOP_STUDENTS.
5) Проверьте случай n = 0. Выдайте соответствующее сообщение.
6) После каждого теста просмотрите данные из таблицы TOP_ STUDENTS.

Помогите пожалуйста, не выходит:(
USE DB
DECLARE mycursor CURSOR LOCAL FORWARD_ONLY STATIC
FOR SELECT FIO, Mark
FROM Student FULL JOIN Exam ON Exam.Id_Student=Student.Id_Student
OPEN mycursor
DECLARE @n INT, @fio VARCHAR(20), @res INT
DECLARE @TOP_STUDENTS TABLE (fio VARCHAR(20), Mark INT)
SELECT Mark FROM Exam
IF Mark>=4 THEN @n=@n+1
FETCH NEXT FROM mycursor INTO @fio, @res WHILE @@FETCH_STATUS=0
begin
IF @n>0
INSERT INTO @TOP_STUDENTS VALUES (@fio, @res)
FETCH NEXT FROM mycursor INTO @fio, @res
END
IF @n=0 PRINT 'Студентов с высоким показателем среднего балла не найдено'
SELECT * FROM @TOP_STUDENTS
CLOSE mycursor
DEALLOCATE mycursor

К сообщению приложен файл. Размер - 35Kb
16 апр 16, 19:51    [19067063]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры в SQL  [new]
iljy
Member

Откуда:
Сообщений: 8711
kuralesya,

а вы сообщения об ошибках-то прочитали для начала? Как у вас база называется? (это про первую ошибку)
По второй: что по вашему такое Mark в условии IF?
16 апр 16, 20:25    [19067143]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры в SQL  [new]
xenix
Guest
use db
go

DECLARE @n INT, @fio VARCHAR(20), @res INT
DECLARE @TOP_STUDENTS TABLE (fio VARCHAR(20), Mark INT)

DECLARE cCursor LOCAL FAST_FORWARD READ_ONLY FOR
 SELECT S.FIO, E.MARK
FROM STUDENTS S FULL JOIN EXAMS E ON S.STUDENT_ID=E.STUDENT_ID
OPEN cCursor;
FETCH NEXT FROM cCursor INTO @FIO,@RES;
WHILE @@FETCH_STATUS=0
 BEGIN
  IF @RES>4
    INSERT @TOP_STUDENTS(FIO,MARK)
      VALUES (@FIO,@RES);

  FETCH NEXT FROM cCursor INTO @FIO,@RES;
   
 END;

CLOSE cCursor;
DEALLOCATE cCursor;
17 апр 16, 10:13    [19068270]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры в SQL  [new]
Gobzo Kobler
Member

Откуда: у людей такая фантазия?
Сообщений: 387
Правильный ответ: не надо использовать курсоры.
18 апр 16, 16:51    [19073186]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры в SQL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9169
Gobzo Kobler,

с чего бы вдруг, чтобы на пересдачу отправиться за такой ответ?
18 апр 16, 18:06    [19073588]     Ответить | Цитировать Сообщить модератору
 Re: Курсоры в SQL  [new]
volodin661
Member

Откуда: Внутренняя Монголия
Сообщений: 537
Владислав Колосов,
некоторые и на костёр шли.
18 апр 16, 18:34    [19073727]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить