Выполнение функции, возвращающей переменную типа Table

Создайте Функцию PostDet.KLAV, которая возвращает все значения поставок поставщика S1 из таблицы PostDet.tblSP.

В окне создания запросов введите код:

USE Postavki;

GO

CREATE FUNCTION PostDet.KLAV

(

@NewPost CHAR(10)

)

RETURNS TABLE

AS

RETURN

(

SELECT DISTINCT QTY As NewQTY FROM PostDet.tblSP

WHERE PostDet.tblSP.S = @NewPost

);

Выполните функцию. Сохраните код выполненной функции.

 

Разрешение для функции можно предоставить тем же способом, каким предоставляется разрешение SELECT для таблиц.

--Разрешение на выполнение функции PostDet.Klav.

USE Postavki;

GO

GRANT SELECT ON PostDet.Klav TO Fred;

 

Протестируйте функцию. В окне запроса введите код:

SELECT * FROM PostDet.Klav(‘S1’);

 

В результате получите все значения поставок поставщика ‘S1’.

Далее процедура PostDet.QTYSUM из этих значений будет определять максимальное значение поставок.

USE Postavki;

GO

CREATE PROCEDURE PostDet.QTYSUM

AS

DECLARE @NumPost char(10), @a char(7)

SET @NumPost = 'S1'

SET @a = (SELECT MAX(NewQTY) FROM PostDet.KLAV ( @NumPost))

SELECT @a

Выполните и сохраните созданную процедуру .

Предоставьте пользователюFred разрешение на выполнение процедуры PostDet.QTYSUM .

USE Postavki;

GO

GRANT EXECUTE ON. PostDet.QTYSUM

TO[FS-64C67299CCAR\Fred];

Переключитесь на учетную запись Fred и войдите на сервер.

Выполните процедуру. Для этого в окне редактора введите код: PostDet.QTYSUM;

Вы получите максимальное значение поставок поставщика ‘S1’.

Использование триггеров.

Триггер — это особая разновидность хранимой процедуры, которая может выполняться автоматически или для модификации данных, это триггер DML, или для действий с моделью данных, это триггер DDL .

Триггеры DML прикреплены к определенной таблице или представлению и выполняются в ответ на инструкции INSERT, UPDATE или DELETE. Они используются для поддержания целостности данных, для каскадных обновлений или для осуществления бизнес-правил. Триггеры DDL прикреплены к действию, которое происходит в базе данных или на сервере, и применяются к инструкциям таким, как например, CREATE, ALTER, DROP. Они, как правило, создаются для обеспечения безопасности системы.

Переключитесь на учетную запись администратора и войдите в SQL Server. Создайте триггер, запрещающий вставку записи в таблицу tblS.

 

В окне создания запросов введите код:

USE Postavki

GO

CREATE TRIGGER PostDet. no_insert ON PostDet.tblS

For INSERT

AS

ROLLBACK;

Сохраните триггер. Откройте таблицу PostDet.tblS и вставьте запись. Запись не добавиться. Получите сообщение об ошибке. Нажмите клавишу Esc. Создайте триггер DDL, который будет срабатывать каждый раз, когда будет выполняться инструкция DROP_TABLE.

USE Postavki;

GO

CREATE TRIGGER trgDrp

ON DATABASE

FOR DROP_TABLE

AS

ROLLBACK;

Нажмите выполнить. Попытка удаления таблицы из базы данных закончится сообщением об ошибке.

С помощью инструкции DISABLE TRIGGER отключите созданный выше триггер PostDet.no_insert.

USE Postavki;

GO

DISABLE TRIGGER PostDet.no_insert ON PostDet.tblS;

Повторно включить триггер можно с помощью инструкции ENABLE TRIGGER.

USE Postavki;

GO

ENABLE TRIGGER PostDet.no_insert ON PostDet.tblS;

Для удаление триггера используется команда DROP TRIGGER.

DROP TRIGGER trigger_name ON [Database]

Защита данных с помощью транзакций.

Транзакция – это логическая единица работы, чаще всего состоящая из нескольких операций, последовательное выполнение которых переводит базу данных из одного непротиворечивого состояния в другое. СУБД рассматривает транзакцию, как неделимую группу команд и исполняет либо все команды, либо ни одной.

Пример 1. Удалить в базе данных Postavki все сведения о поставщике ‘S3’ .

В редакторе создания запроса введите код:

1 BEGIN TRANSACTION;

2 DELETE FROM PostDet.tblSP

3 WHERE S = ‘S3’;

DELETE FROM PostDet.tblS

5 WHERE S = ‘S3’;

6 COMMIT;

 

1 - начало транзакции.

2,3 - удаление записи из таблицы PostDet.tblSP.

4,5 – удаление записи из таблицы PostDet.tblS.

6 – проверка корректности базы данных. Если Да, то оператор COMMITфиксирует изменения в базе данных (фиксирует транзакцию). Все изменения будут успешно внесены в базу данных.

С помощью транзакций можно провести несколько изменений в базе данных, а затем в зависимости от объективных условий принять или отменить внесенные изменения

Пример 2. Подсчитать суммарное количество поставляемых деталей и среднее арифметическое. Увеличить количество деталей поставщика ‘S3 ‘ в 3 раза, вычислить те же величины и отменить транзакцию. Показать результат запроса к базе данных.

В редакторе создания запроса представлен код транзакции, а во вкладке Grids - ее результат (Рисунок 1). Введите этот код. Выполните и сохраните транзакцию.

Как видно из Рисунка 1, в результате выполнения кода транзакции база

данных будет находиться в состоянии, в котором она была до начала выполнения транзакции.

 

 

Рисунок 1. Окно создания запросас кодом транзакции и результатом ее выполнения.