Разработка серверной части ИС в СУБД MS SQL Server. Серверная часть клиент-серверной информационной системы в заданной предметной области, страница 2

WHERE (dbo.Послужной_список.Дата_занятия_должности>=CONVERT(date, @before) and dbo.Послужной_список.Дата_занятия_должности<=CONVERT(date,@after))

)

)

Inline_func – название функции. В функцию передаётся 2 параметра типа nchar(задаем промежуток времени). Функция возвращает таблицу значений . В таблицу будут выводиться значения полей из таблицы «Сотрудники» и «Послужной_список», если данные будут входить в заданный промежуток.

Синтаксис вызова:  Select  * From dbo.Inline_func1('2013-04-01', '2013-05-01')

Рисунок 18 – Результат выполнения пользовательской табличной функции Inline – выбор сотрудников, устроившихся на работу в заданный период времени

4.3 Создать пользовательскую табличную функцию Multistatement, которая будет выполнять увеличение зарплаты у кураторов.

Create  FUNCTION [dbo].[Multi_func]

()

RETURNS @Зарплата TABLE (ФИО nchar(30),

Должность nchar(30), Оклад money)

AS

BEGIN

DECLARE @оклад int

INSERT INTO @Зарплата

SELECT dbo.Сотрудники.ФИО, dbo.Должность.Название, (CONVERT(int, dbo.Должность.Оклад)+1000) FROM dbo.Сотрудники

INNER JOIN  dbo.Должность  ON  dbo.Сотрудники.Код_должности= dbo.Должность.Код_должности

WHERE dbo.Должность.Название=N'Куратор'

RETURN

END

GO

Multi_funс- название функции. В функцию не передаются параметры. Функция возвращает таблицу значений . В функции создаётся новая таблица @Зарплата с полями ФИО, Должность и оклад. Результат работы функции: увеличение оклада сотрудников на должности куратора.

Синтаксис вызова: SELECT * FROM dbo.Multi_func()

Рисунок 19 – Результат выполнения пользовательской табличной функции Multistatement – увеличение зарплаты куратора на 100 тысяч

5. Для разработанной БД предложить операции обработки данных, требующие использования локальных хранимых процедур. Разработать две хранимых процедуры и протестировать их работу.

5.1 Разработать хранимую процедуру с входными параметрами, которая выводит все сведения о сотруднике по ФИО.

Create PROCEDURE [dbo].[Viborka1]

@ФИО nchar(20)

AS

BEGIN

SELECT *

FROM  dbo.Сотрудники INNER JOIN  dbo.Должность  ON  dbo.Сотрудники.Код_должности= dbo.Должность.Код_должности

WHERE  dbo.Сотрудники.ФИО=@ФИО

END

Viborka1 - название функции. В функцию передаётся 1 параметр символьного типа(ФИО). В функции производится выборка данных из таблиц Сотрудники и Должность, если значение поля ФИО совподает с заданным значением.

Синтаксис вызова: Viborka1 'Сынкова Т.В'

Рисунок 20 – Результат выполнения процедуры - сведения о сотрудниках по заданному ФИО

5.2 Разработать хранимую процедуру с входными параметрами, которая выводит все сведения о сотрудниках заданного возраста.

Create PROCEDURE [dbo].[Viborka3]

@возраст nchar(20)

AS

BEGIN

SELECT *

FROM  dbo.Сотрудники INNER JOIN  dbo.Должность  ON  dbo.Сотрудники.Код_должности= dbo.Должность.Код_должности

WHERE   YEAR(GETDATE())-YEAR(dbo.Сотрудники.Дата_рождения)= CONVERT(int,@возраст)

END

Viborka3 - название функции. В функцию передаётся 1 параметр символьного типа(возраст). В функции производится выборка данных из таблиц Сотрудники и Должность, если вычесляемое поле Дата рождения совподает с заданным значением.

Синтаксис вызова: Viborka3 '21'

Рисунок 21 – Результат выполнения процедуры - сведения о сотрудниках по заданному возрасту

6. Создать для разработанной БД следующие DML-триггеры:

·  обеспечивающие целостность данных и выполняющие каскадное обновление и удаление данных в таблицах на стороне отношения «многие» при изменениях соответствующих данных в таблицах на стороне отношения «один»;

Обновление данных в таблице «Сотрудники»

CREATE TRIGGER [dbo].[TriggerDML2]

ON [dbo].[Сотрудники]

AFTER INSERT /* при попытке добавить данные*/

AS

BEGIN

SET NOCOUNT ON;

RAISERROR ('Добавить данные нельзя', 15,1)

END

Рисунок 22 – Результат выполнения тригерра – запрет обновления данных в таблице Сотрудники

DDL триггер, запрещающий удалять таблицы из БД с выводом соответствующего сообщения

CREATE TRIGGER [DDLTrigger3]

ON DATABASE

FOR DROP_TABLE

AS

BEGIN

PRINT 'Запрещено удаление таблиц'

ROLLBACK;

END

Go

DROP TABLE dbo.Сотрудники

Данный триггер запускается автоматически, при удалении таблиц из БД. Выводится сообщение «Запрещено удаление таблиц»

Попытка удаление таблицы: DROP TABLE dbo.Сотрудники

Рисунок 23  – Результат выполнения: удаления таблицы из базы

·  триггеры INSTEAD OF (предложить соответствующие операции обработки данных).

Рисунок 24 – Исходный код триггера INSTEAD OF, оповещающего о добавлении данных в таблицу «Должность»

Вывод: В ходе лабораторной работы была разработана серверная часть клиент-серверной информационной системы в области «Языковые курсы» средствами СУБД MS SQL Server: разработаны и настроены свойства таблиц и представлений, создана диаграмма БД и триггеры, обеспечивающие целостность БД. Также были разработаны хранимые процедуры и пользовательские функции различных типов.