СУБД MS SQL Server: разработка пользовательских функций, хранимых процедур, триггеров, представлений, курсоров, страница 2

Синтаксис вызова: Viborka 'ФАИС'

3.  Триггеры.

3.1 Триггеры должны выполнять следующую обработку данных:

отправка клиенту сообщения при добавлении данных в таблицу Студенты;

CREATE TRIGGER [dbo].[Insert2]

ON [dbo].[Студенты]

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

AS

BEGIN

SET NOCOUNT ON;

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

END

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

3.2Триггеры должны выполнять следующую обработку данных:

Отменить удаление строк в таблице Студенты и вывести сообщение об ошибке

CREATE TRIGGER [dbo].[nodelete]

ON [dbo].[Студенты]

INSTEAD OF DELETE

AS

DELETE FROM Студенты

WHERE КодСтудента IN (SELECT КодСтудента FROM deleted)

IF(@@ERROR>0)

BEGIN

ROLLBACK TRANSACTION

raiserror('Ошибка удаления из таблицы студенты!',16,3)

RETURN

END

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

CREATE TRIGGER [DDLTrigger]

ON DATABASE

FOR DROP_TABLE

AS

BEGIN

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

ROLLBACK;

END

Go

DROP TABLE dbo.Платежи

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

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

4.  Курсоры

‒ Статический курсор(вывод данных)

USE laba

GO

--Объявление курсора

DECLARE ACursor CURSOR LOCAL STATIC

FOR SELECT ФИО, СокрНазФак FROM dbo.Студенты

DECLARE @Fam nchar(10), @facultet nchar(10)

--Открытие курсора

OPEN ACursor

--Выборка данных из курсора(3-ей строки)

FETCH ABSOLUTE 3 FROM ACursor

INTO @Fam, @facultet

-- Вывод значения переменных

PRINT 'ФИО '+@Fam +' Факультет '+@facultet

--Закрытие курсора

CLOSE ACursor

--Освобождение курсора

DEALLOCATE ACursor

Используется для вывода фамилии и факультета третьего студента из списка. Для начала описываем курсор инструкцией DECLARE, задаём атрибут LOCAL STATIC. Описываем переменные, которые будут получать данные. Открываем курсор. Забираем значения из курсора и помещаем их в объявленные переменные. Выводим сформированную строку.

‒ Динамический курсор (вывод данных)

DECLARE ACursor2 CURSOR

LOCAL

FOR SELECT ФИО, СокрНазФак, Группа FROM dbo.Студенты

--Открытие курсора

OPEN ACursor2

--Выборка данных(первая строка из таблицы Платежи)

FETCH ACursor2

--Закрытие курсора

CLOSE ACursor2

--Освобождение курсора

DEALLOCATE ACursor2

Используется для вывода фамилии , факультета и группы первого студента из списка. Для начала описываем курсор инструкцией DECLARE, задаём атрибут LOCAL. Описываем переменные, которые будут получать данные. Открываем курсор. Забираем значения из курсора и помещаем их в объявленные переменные. Выводим сформированную строку.

‒ Выборки данных

DECLARE ACursor4 CURSOR

LOCAL

FOR SELECT ФИО, СокрНазФак, Группа FROM dbo.Студенты

WHERE ФИО='Иванова'

--Открытие курсора

OPEN ACursor4

--Выборка данных(первая строка из таблицы Платежи)

FETCH ACursor4

--Закрытие курсора

CLOSE ACursor4

--Освобождение курсора

DEALLOCATE ACursor4

Используется для вывода ФИО,названия факультета и группы заданного студента из списка. Для начала описываем курсор инструкцией DECLARE, задаём атрибут LOCAL. Выбираем из таблицы «Студенты» значения полей ФИО. Открываем курсор. Забираем значения из курсора. Выводим сформированную строку.

‒ Модификации данных

USE laba

GO

--Объявление курсора

DECLARE ACursor3 CURSOR LOCAL

FOR SELECT ФИО, ДатаРождения FROM dbo.Студенты

--Открытие курсора

OPEN ACursor3

--Выборка данных из курсора(3-ей строки)

FETCH FROM ACursor3

UPDATE Студенты SET ФИО='Сидаров'

WHERE CURRENT of ACursor3

-- Вывод обновленной строки

SELECT ФИО, ДатаРождения FROM Студенты

WHERE ДатаРождения=CONVERT(date, '1994-01-01')

--Закрытие курсора

CLOSE ACursor3

--Освобождение курсора

DEALLOCATE ACursor3

Используется для изменения ФИО . Для начала описываем курсор инструкцией DECLARE, задаём атрибут LOCAL. Открываем курсор. Забираем значения из курсораи обновляем полученное значение. Выводим новую строку.

Вывод работы: изучили технологию создания основных объектов БД, разработки программных модулей в СУБД MS SQL Server. Разработали DDL- и DМL-триггеры, создали курсоры вывода данных, одновление и выборки, а так же создали скалярные функции.