Опубликован: 02.02.2007 | Доступ: свободный | Студентов: 2374 / 243 | Оценка: 4.10 / 3.86 | Длительность: 26:44:00
Урок 29:

Пользовательские функции

< Урок 28 || Урок 29: 1234567

Применение пользовательских функций

Синтаксис вызова скалярных функций схож с синтаксисом, используемым для встроенных функций Transact-SQL:

имя_владельца.имя_функции([список_параметров])

Имя_владельца для скалярной функции является обязательным. Вы не можете использовать синтаксис с именованными параметрами (например, @имя_параметра = значение), а также не можете не указывать (опускать) параметры, но вы можете применять ключевое слово DEFAULT для указания значения по умолчанию, как вы это делаете для хранимых процедур.

Совет. SQL Server предоставляет несколько встроенных пользовательских функций, не относящихся к обычным встроенным функциям. Они начинаются с fn_, а при их вызове используется специальный синтаксис ::имя_функции([список_параметров] ). Символы :: заменяют имя_владельца и указывают на то, что функция является встроенной пользовательской функцией.

Для скалярной функции вы также можете использовать оператор EXECUTE:

EXECUTE @возвращаемое_значение = имя_функции(список_параметров)

Если вы используете оператор EXECUTE для пользовательской функции, вам не нужно указывать имя_владельца. В этом синтаксисе вы можете использовать именованные параметры:

EXECUTE @возвращаемое_значение = имя_функции @параметр = значение
[, @параметр = значение [,...]]

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

Для табличных пользовательских функций, как подставляемых, так и многооператорных, должен всегда использоваться тот же синтаксис, что и для встроенных функций:

имя_функции([список_параметров])

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

Применение пользовательских функций в операторах Transact-SQL

Скалярные пользовательские функции могут использоваться везде, где допустимо использовать тип данных, который они возвращают. Табличные пользовательские функции могут быть использованы только во фразе FROM оператора SELECT.

Примечание. Если фраза SELECT находится внутри оператора DECLARE CURSOR, курсор должен иметь тип STATIC и READ_ONLY.

Используйте скалярную функцию в операторе PRINT

  1. Нажмите кнопку New Query (Новый запрос)в панели инструментов анализатора запросов Query Analyzer. Query Analyzer откроет новое окно Query (Запрос).
  2. Введите следующий оператор SQL в окне Query (Запрос):
    PRINT dbo.scalarFunction('German Chamomile')
  3. Нажмите кнопку Execute Query (Выполнить запрос)в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит оператор и отобразит результат.

Используйте скалярную функцию в операторе SELECT

  1. Выберите вкладку Editor (Редактор) в окне Query (Запрос) и нажмите кнопку Clear Window (Очистить окно)в панели инструментов анализатора запросов Query Analyzer. Query Analyzer очистит окно Query (Запрос).
  2. Введите следующий оператор SQL в окне Query (Запрос):
    SELECT OilID, dbo.scalarFunction(OilName)
    FROM Oils
  3. Нажмите кнопку Execute Query (Выполнить запрос)в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит оператор и отобразит результат.

Используйте табличную функцию в операторе SELECT

  1. Выберите вкладку Editor (Редактор) в окне Query (Запрос) и нажмите кнопку Clear Window (Очистить окно)в панели инструментов анализатора запросов Query Analyzer. Query Analyzer очистит окно Query (Запрос).
  2. Введите следующий оператор SQL в окне Query (Запрос):
    SELECT * FROM tableFunction()
  3. Нажмите кнопку Execute Query (Выполнить запрос)в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит оператор и отобразит результат.

  4. Закройте окно Query (Запрос), отказавшись от сохранения изменений при появлении окна-запроса.
< Урок 28 || Урок 29: 1234567
Инна Грушецкая
Инна Грушецкая
Сергей Чесноков
Сергей Чесноков