Разработка подсистемы учета успеваемости студентов Байкальского государственного университета экономики и права
from HoursVars
where CodVar = @CodVar
select @CodOrganization = isNULL(@CodOrganization,1),
@Lec = isNULL(@Lec,0), @Sem = isNULL(@Sem,0), @Sam = isNULL(@Sam,0)
--select @err = 'Mark = '+str(@CodOrganization)
execute dbo.e_DetectCodVar @CodSub, @CodSubType, @CodOrganization,
@CodKaf, @Lec, @Sem, @Sam, @ECTScretits, @CodVarNEW output
--raiserror(@err, 16,1);
select
@CodOp = 3
if not exists(select * from Exam
where
CodStudent=@CodStudent
and Course=@Course
and NumTerm=@NumTerm
and CodExType=@CodExType
and mark = @mark
and CodVar=@CodVar
) select @CodOp = 2
--Добавление
IF @CodOp=2
begin
Insert Exam (CodStudent,Course,NumTerm,CodExType,Mark,CodECTSMark,
CodPrep,DateExam,CodVar,CodVUZ)
Values(@CodStudent,@Course,@NumTerm,@CodExType,@Mark,@CodECTSMark,
@CodPrep,@DateExam,@CodVarNEW,@CodVUZ)
-- if @@error <> 0 rollback tran else commit tran
return
end
--Изменение
IF @CodOp=3
begin
if exists(select * from Exam
where
CodStudent=@CodStudent
and Course=@Course
and NumTerm=@NumTerm
and CodExType=@CodExType
and mark = @mark
and CodVar=@CodVarNEW
and CodECTSmark = @CodECTSmark
and CodPrep = @CodPrep
and DateExam = @DateExam
and CodVUZ = @CodVUZ
) return
UPDATE Exam SET CodECTSMark=@CodECTSMark,
CodPrep=@CodPrep, DateExam=@DateExam, CodVUZ=@CodVUZ
WHERE CodStudent=@CodStudent
and Course=@Course
and NumTerm=@NumTerm
and CodExType=@CodExType
and mark = @mark
and CodVar=@CodVar
-- if @@error <> 0 rollback tran else commit tran
end
END
/**************************************************************
Предназначена для изменения существующей оценки в таблице Exam
Параметры делятся на три группы:
- старые значения ключевых полей (для идентификации изменяемой оценки);
- новые значения ключевых полей;
- новые значения неключевых полей.
Предварительно необходимо определить CodVarNEW для изменяемой оценки
Сначала производится удаление оценки, а затем вставка с новыми значениями
ЗУБКОВ СЕРГЕЙ
28\05\2002 17:21
****************************************************************/
CREATE PROCEDURE [dbo].[e_UpdateMark]
(
@CodStudent int,
@CodVar int, -- ключевые поля, определяющие, какую оценку меняем
@Course tinyint,
@NumTerm tinyint,
@CodExType tinyint,
@Mark tinyint,
@CodVarNEW int, --набор новых значений ключевых полей
@CourseNEW tinyint,
@NumTermNEW tinyint,
@CodExTypeNEW tinyint,
@MarkNEW tinyint,
@CodECTSMark smallint, -- значение неключевых полей
@CodPrep int,
@DateExam smalldatetime,
@CodVUZ int
)as
BEGIN
--if @CodECTSMark IS NULL BEGIN RAISERROR('Не указана рейтинговая оценка!',16,-1) return END
if @DateExam IS NULL BEGIN RAISERROR('Не указана дата!',16,-1) return END
if @CodVUZ IS NULL BEGIN RAISERROR('Не указан ВУЗ!',16,-1) return END
if @CodECTSMark IS NULL SELECT @CodECTSMark=0
BEGIN TRAN
-- удаляем старую оценку
exec e_DeleteMark @CodStudent, @CodVar, @Course, @NumTerm, @CodExType, @Mark
-- добавляем новую
exec e_AddMark @CodStudent, @CodVarNEW, @CourseNEW, @NumTermNEW, @CodExTypeNEW, @MarkNEW, @CodECTSMark, @CodPrep, @DateExam, @CodVUZ
IF @@ERROR<>0
BEGIN
ROLLBACK TRAN
END
ELSE COMMIT TRAN
END
/******************************************************************************
Object: Stored Procedure dbo.e_DetectCodVar Script Date: 17.11.2001 15:03:37
Процедура определяет @CodVar по содержанию варианта (остальные параметры)
Если варианта нет, то он заносится в HoursVars
****************************************************************************/
CREATE PROCEDURE [dbo].[e_DetectCodVar]
(@CodSub int, @CodSubType tinyint, @CodOrganization tinyint,
@CodKaf tinyInt, @Lec SmallInt, @Sem SmallInt, @Sam SmallInt, @ECTScretits float,
@CodVar int OUTPUT)
AS
--
-- Проверка существования варианта
--
IF EXISTS(SELECT * FROM HoursVars WHERE
CodSub=@CodSub AND CodSubType=@CodSubType
AND CodOrganization=@CodOrganization AND CodKaf=@CodKaf
AND Lec = @Lec AND Sem = @Sem AND Sam=@Sam AND ECTScretits = @ECTScretits)
--
-- Возвращается номер существующего варианта
--
SELECT @CodVar=CodVar FROM HoursVars WHERE
CodSub=@CodSub AND CodSubType=@CodSubType
AND CodOrganization=@CodOrganization AND CodKaf=@CodKaf
AND Lec = @Lec AND Sem = @Sem AND Sam=@Sam AND ECTScretits = @ECTScretits
ELSE
BEGIN
BEGIN TRAN
--
-- Выбирается свободный номер
--
SELECT @CodVar=curentvalue from autoincdata where tablename='HoursVars'
--
-- Добавляется вариант
--
INSERT HoursVars
VALUES (@CodVar,@CodSub,@CodSubType,@CodOrganization,@CodKaf,@Lec,@Sem,@Sam,@ECTScretits)
if @@error<>0
begin
rollback tran
--
-- При аварийном завершении возвращается -1
--
SELECT @CodVar=-1
end
else
begin
commit tran
end
END
Другие рефераты на тему «Программирование, компьютеры и кибернетика»:
Поиск рефератов
Последние рефераты раздела
- Основные этапы объектно-ориентированного проектирования
- Основные структуры языка Java
- Основные принципы разработки графического пользовательского интерфейса
- Основы дискретной математики
- Программное обеспечение системы принятия решений адаптивного робота
- Программное обеспечение
- Проблемы сохранности информации в процессе предпринимательской деятельности