Создайте Функцию 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’.