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

Откуда: Израиль / Москва
Сообщений: 295
У меня есть три таблицы, студенты, экзамены и оценки студентов по экзаменам.
Создал для изучения:
CREATE TABLE [dbo].[Exams] (
	[ExamID] [int] NOT NULL ,
	[Subject] [nvarchar] (50) NULL ,
	[ExamDate] [smalldatetime] NULL 
) ON [PRIMARY]


CREATE TABLE [dbo].[Grades] (
	[GradeID] [int] IDENTITY (1, 1) NOT NULL ,
	[StudentID] [int] NOT NULL ,
	[ExamID] [int] NOT NULL ,
	[Grade] [int] NULL ,
	[Notes] [nvarchar] (50) NULL 
) ON [PRIMARY]


CREATE TABLE [dbo].[Students] (
	[StudentID] [int] NOT NULL ,
	[Name] [nvarchar] (50) NULL ,
	[BirthDate] [smalldatetime] NULL 
) ON [PRIMARY]
Цель: Пройти по таблице оценок, и если нет строки для какого либо студента с экзаменом, то добавить строку с его ID, ID экзамена и 0 (нулевой) оценкой.

Пишу:
declare Grade_Cursor cursor for 
select t1.StudentID, t1.Name, t1.BirthDate, t1.ExamID, t1.Subject, Grades.Grade, Grades.Notes
from 
(
	select *
	from Students, Exams
) t1
left outer join Grades on t1.StudentID = Grades.StudentID 
	and t1.ExamID = Grades.ExamID
where Grades.Grade is null
for update

open Grade_Cursor

fetch next from Grade_Cursor
while @@FETCH_STATUS = 0
begin
	[b]insert into Grades (StudentID, ExamID, Grade, Notes)
	values (StudentID, ExamID, 0, 'Added by Grade_Cursor')[/b] -- ОШИБКА
    fetch next from Grade_Cursor
end

close Grade_Cursor
deallocate Grade_Cursor

Но как же добавляются новые строки? Как получить StudentID и ExamID?

Спасибо.
12 авг 05, 17:22    [1782982]     Ответить | Цитировать Сообщить модератору
 Re: Вставить новую строку с помощью CURSOR?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Но как же добавляются новые строки? Как получить StudentID и ExamID?
Читаейте про FETCH. Там все есть
12 авг 05, 17:24    [1782989]     Ответить | Цитировать Сообщить модератору
 Re: Вставить новую строку с помощью CURSOR?  [new]
igoro1975
Member

Откуда: Израиль / Москва
Сообщений: 295
Glory
Но как же добавляются новые строки? Как получить StudentID и ExamID?
Читаейте про FETCH. Там все есть

Уверен в этом... Нужно использовать FETCH с помощью переменных? ...и потом уже оперировать этими переменными?

P.S. Извините, любопытство... Вас когда-нибудь не бывает на этом форуме? ;)
12 авг 05, 17:30    [1783001]     Ответить | Цитировать Сообщить модератору
 Re: Вставить новую строку с помощью CURSOR?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Нужно использовать FETCH с помощью переменных?
Вообще-то лучше использовать один зарпос

insert into Grades (StudentID, ExamID, Grade, Notes)
select t1.StudentID, t1.ExamID, 0, 'Added by Grade_Cursor'
from 
(
	select *
	from Students, Exams
) t1
left outer join Grades on t1.StudentID = Grades.StudentID 
	and t1.ExamID = Grades.ExamID
where Grades.Grade is null
12 авг 05, 17:37    [1783020]     Ответить | Цитировать Сообщить модератору
 Re: Вставить новую строку с помощью CURSOR?  [new]
igoro1975
Member

Откуда: Израиль / Москва
Сообщений: 295
Glory

Вообще-то лучше использовать один зарпос

Я понимаю, но я просто учусь пользрваться курсорами....

P.S. Вроде понял, нужно пользоваться переменными:
fetch next from Grade_Cursor
into @StudentID, @ExamID
12 авг 05, 17:51    [1783063]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить