Выполнение функции, возвращающей переменную типа 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. Окно создания запросас кодом транзакции и результатом ее выполнения.