Определение функций Multi-statementтакже практически полностью аналогично определению функций scalar и inline, рассмотренных ранее.
Но есть и отличия:
1. Первое отличие связано с тем, что здесь необходимо
a.в отличие от функций inline и scalar - указать имя локальной переменной типа TABLE, в которой будет возвращен результат выполнения функции;
b.определять тип возвращаемого значения;
c.явно определить набор столбцов, которые будут применяться для хранения полученных данных.
В этих функциях можно дополнительно определять индексы, ограничения целостности и т. д.
2. Второе отличие связано с завершением работы функции. Завершение работы функции происходит при выполнении команды return, однако не требуется указание значения, которое будет возвращено как результат выполнения функции. Всегда возвращается содержимое переменной типа TABLE, указанной после ключевого слова returns.
Пример 4.Функция возвращает множество продавцов по заданному товару и дате
Create function example ( @abc varchar(20), @bcd date)
returns @cde table (Сотрудники varchar(20) null)
insert into @cde
select Фамилия from Персонал inner join Продажи on Персонал.id_сотрудника = Продажи.Продавец inner join Товары on Товары.id_товара = Продажи.Товар where Товары.Название_товара =@abc and Продажи.Дата = @bcd
Может возникнуть необходимость внести в уже созданную функцию некоторые изменения. Для этого вы можете использовать команду alter function.
Параметры и синтаксис команды alter function аналогичны команде create function, требуется лишь заменить слово create на alter.
Пример 8. Команда обновления функции:
ALTER FUNCTION MyFunc ( @Char char, @n int)
SELECT Фамилия, Имя, Отчество, Город, Телефон
FROM Клиенты INNER JOINТелефоны_клиентов
ONКлиенты.ID_клиента = Телефоны_клиентов.Клиент
WHERE LEFT (Фамилия, 1) = @Char AND LEN(Фамилия)<=@n
Для удаления функции используется команда drop function, имеющая синтаксис:
DROP FUNCTION {[имя_схемы. ] имя_функции } [, ...n]
С помощью одной команды можно удалить множество функций, просто перечислив их имена через запятую.