1. Создать просмотр для вывода кратких сведений о студентах (идентификатор, номер зачетки, фамилия и инициалы, идентификатор группы):
– создать представление Students_info:
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов | Базы данных
| Education | пр. кн. мыши на Представления | Создать представление… ►
ф. Добавление таблицы | выбр. Students; кн. Добавить; кн. Закрыть;
ф. Представление – dbo.View_1*
(1-я стр. | Столбец ← stud_ID); (2-я стр. | Столбец ← no_zk);
(3-я стр. | Столбец ← RTRIM(fam) + ' ' + SUBSTRING(im; 1; 1) + '.' + SUBSTRING(ot; 1; 1) + '.'; Псевдоним ← fio);
(4-я стр. | Столбец ← RTRIM(spec) + '-' + kurs + gr; Псевдоним ← gruppa);
кл. [Ctrl + S] ►ф. Выбор имени | Введите имя представления ← Students_info.
– проверить работоспособность представления:
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов | Базы данных
| Education | Представления | пр. кн. Students_info |
Открыть представление ► результаты на экране.
2. Аналогичным образом создать представление для вывода сведений об успеваемости студентов из таблицы успеваемости с указанием сведений о студенте из запроса Students _ info и сведений о предмете из таблицы предметов. Результат должен содержать следующие поля: ФИО студента, Группа, Предмет, Дата, Оценка. Назвать представление как Students_uspev.
3. Создать хранимую процедуру для вывода кратких сведений о студенте (идентификатор, фамилия и инициалы, идентификатор группы) по номеру его зачетной книжки:
– создать хранимую процедуру GetStudentInfo
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов |
Базы данных | Education | Программирование | пр. кн. мыши на Хранимые процедуры |
Создать хранимую процедуру…► ф. Имя сервера.Education – SQLQuery1.sql |
Панель инструментов | кн. Указать значения для параметров шаблона ►
ф. Задание значений для параметров шаблона | Параметр Author;
Значение ← Номер группы; Параметр Create Date; Значение ← Текущая дата;
Параметр Author; Значение ← Номер группы; Параметр Description; Значение ← Краткие
сведения о студенте; Параметр Procedure_Name; Значение ← GetStudentInfo;
Параметр @Param1; Значение ← @zk; Параметр Datatype_For_Param1;
Значение ← char(6); кн. OK;
– ввести программный код
ф. Имя сервера.Education – SQLQuery1.sql | удалить строки, @p2 int = 0;
вместо строки SELECT @zk, @p2 ввести код:
SELECT stud_ID, RTRIM(fam) + ' ' + SUBSTRING(im, 1, 1) + '.' + SUBSTRING(ot, 1, 1)
+ '.' AS fio, RTRIM(spec) + '-' + kurs + gr AS gruppa
FROM dbo.Students
WHERE no_zk = @zk
– сохранить хранимую процедуру под именем GetStudentInfo.sql.
– привязать хранимую процедуру к базе данных
Панель инструментов | кн. Выполнить
– проверить работоспособность хранимой процедуры:
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов |
Базы данных | Education | Программирование | Хранимые процедуры | пр. кн. мыши
на GetStudentInfo | Выбрать хранимую процедуру… | ф. Выполнение процедуры… |
Параметр @zk; Значение ← ввести любое значение номера зачетной книжки;
кн. OK ►результаты на экране.
4. Создать триггер, проверяющий, что каждый студент может сдавать не более двух предметов в один день.
– создать новый триггер CheckExams для таблицы успеваемости
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов |
Базы данных | Education | Таблицы | раскр. Uspev | пр. кн. Триггеры | Создать триггер… ►
ф. Имя сервера.Education – SQLQuery1.sql
Панель инструментов | кн. Указать значения для параметров шаблона ►
ф. Задание значений для параметров шаблона | Параметр Trigger_Name;
Значение ← CheckExams; кн. OK;
– удалить фрагмент
CREATE TRIGGER <Schema_Name, sysname, Schema_Name>.<Trigger_Name, sysname, Trigger_Name>
ON <Schema_Name, sysname, Schema_Name>.<Table_Name, sysname, Table_Name>
AFTER <Data_Modification_Statements,, INSERT,DELETE,UPDATE>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
END
– ввести программный код триггера
CREATE TRIGGER CheckExams
ON Uspev FOR INSERT, UPDATE
AS
DECLARE
@stud INT,
@date DATETIME,
@count INT
BEGIN TRANSACTION
SELECT @stud=Student,@date=Data FROM INSERTED
SELECT @count = count(*)
FROM Uspev WHERE Student=@stud and Data=@date
IF(@count < 3)
BEGIN COMMIT TRANSACTION END
ELSE
BEGIN
RAISERROR(Студент может сдавать не более двух предметов в день',16,1)
ROLLBACK TRANSACTION
END
– сохранить триггер под именем CheckExams.sql.
– привязать триггер к базе данных
Панель инструментов | кн. Выполнить
– проверить работоспособность хранимой процедуры:
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов |
Базы данных | Education | Таблицы | пр. кн. мыши на Uspev | ввести вторую запись
по студенту, сдающему второй предмет в один и тот же день; сделать попытку
перейти на следующую строку ►сообщение об ошибке с текстом из триггера.