- •Содержание
- •Описание предметной области
- •Цель и задачи создания базы данных
- •Концептуальная модель базы данных
- •Реляционная модель базы данных
- •Модель данных в sql Server 2005
- •Структура таблиц и данные в таблицах
- •Запросы
- •Представления (Views)
- •Хранимые процедуры (Stored Procedure)
- •Триггеры (Triggers)
- •Курсоры (Cursor)
- •Список литературы
Триггеры (Triggers)
Триггер для таблицы ekzam , не позволит внести данные без наличия у студента зачета, по этому же предмету.
ПРОГРАММНЫЙ КОД
use lab_prac1
go
CREATE TRIGGER insert_into_ekzam ON dbo.ekzam
FOR INSERT
AS
declare @X int, @Y int
select @X=D.id_un_card, @Y=D.id_predm
from dbo.ekzam, INSERTED D
WHERE
dbo.ekzam.id_un_card=D.id_un_card and
dbo.ekzam.id_predm=D.id_predm
IF not exists (select * from dbo.zachet where
dbo.zachet.id_un_card=@X and dbo.zachet.id_predm=@Y )
begin
ROLLBACK TRAN
RAISERROR ('Ошибонька',16,10)
END
Результат выполнения триггера:
Курсоры (Cursor)
Курсор, формирующий экзаменационные ведомости по всем дисциплинам и всех групп.
ПРОГРАММНЫЙ КОД
declare start scroll cursor
for select dbo.disc.id_predm, dbo.disc.name
from dbo.disc
open start
Declare @predmet int,@nazvanie char(100)
fetch next from start into @predmet, @nazvanie
while @@fetch_status = 0
begin
Print ''
Print ''
print '
ЭКЗАМЕНАЦИОННАЯ ВЕДОМОСТЬ '
Print ' Номер предмета:'+STR(@predmet)
Print ' Название: '+@nazvanie
declare nextstart scroll cursor
for
select distinct dbo.groups.id_groupe
from dbo.groups
inner join dbo.ekzam on dbo.groups.id_groupe=dbo.ekzam.id_groupe
where dbo.ekzam.id_predm=@predmet
open nextstart
declare @group_number int
fetch next from nextstart into @group_number
while @@fetch_status = 0
begin
print ''
print ' Группа '+ STR(@group_number)
print ' ФИО СТУДЕНТА Номер зачетной книжки Оценка'
declare nextnextstart scroll cursor
for
select dbo.students.firstname,dbo.groups_stud.id_un_card,dbo.ekzam.itog
from dbo.students
inner join dbo.groups_stud on dbo.students.id_un_card=dbo.groups_stud.id_un_card
inner join dbo.ekzam on dbo.groups_stud.id_un_card=dbo.ekzam.id_un_card
where dbo.groups_stud.id_groupe=@group_number
open nextnextstart
declare @Nomer_zachetki int,
@Resultat_sessii int,
@Familiya char(50)
fetch next from nextnextstart into @Familiya,@Nomer_zachetki,@Resultat_sessii
while @@fetch_status = 0
begin
print ' - '+@Familiya+''+STR(@Nomer_zachetki) +' '+STR(@Resultat_sessii)
fetch next from nextnextstart into @Familiya,@Nomer_zachetki,@Resultat_sessii
end
close nextnextstart
deallocate nextnextstart
print ' '
fetch next from nextstart into @group_number
end
print''
print ''
print ''
print ''
print ' дата роспись'
close nextstart
deallocate nextstart
fetch next from start into @predmet,@nazvanie
end
close start
deallocate start
Результат выполнения курсора:
Список литературы
1. Коннолли Т. , Бегг К. , Страчан А. Базы данных: Проектирование, реализация и сопровождение: Теория и практика. - К,М,СПб: Вильямс, 2000.
2. www.sql.ru
3. http://msdn.microsoft.com/ru-ru/
4. http://msdn.microsoft.com/en-us/