Преобразование хранимых процедур в функции
В этом подразделе описывается, как определить, нужно ли переписывать логику существующих хранимых процедур в виде пользовательских функций. Например, если нужно вызывать процедуру напрямую из запроса, преобразуйте код процедуры в пользовательскую функцию.
Обычно, если хранимая процедура возвращает один результирующий набор, определяют возвращающую табличное значение функцию. Если хранимая процедура вычисляет скалярное значение, определяют скалярную функцию.
Критерии создания возвращающих табличное значение функций
Если хранимая процедура отвечает следующим условиям, возможно, ее стоит переписать в виде возвращающей табличное значение функции.
Вся логика выражается в одной инструкции SELECT, но это хранимая процедура, а не представление, из-за необходимости использовать параметры. Этот сценарий может обрабатываться встроенной возвращающей табличное значение функцией.
Хранимая процедура не выполняет операций обновления, за исключением обновлений табличных переменных.
Нет необходимости использовать динамические инструкции EXECUTE.
Хранимая процедура возвращает один результирующий набор.
Основная цель хранимых процедур — создавать промежуточные результаты, которые могут быть загружены во временную таблицу и запрошены оттуда инструкцией SELECT. Инструкции INSERT...EXEC могут быть переписаны с помощью возвращающих табличное значение функций. Например, рассмотрим следующую последовательность:
INSERT #temp EXEC sp_getresults SELECT ... FROM #temp, t1 WHERE ...
Хранимая процедура sp_getresults может быть переписана в виде возвращающей табличное значение функции, например fn_results(), то есть предыдущие инструкции могут быть переписаны следующим образом:
INSERT #temp SELECT ... FROM fn_results(), t1 WHERE ...
Преобразование расширенных хранимых процедур в функции CLR
Функции CLR предоставляет более надежный и масштабируемый способ записи расширенных хранимых процедур. Многие расширенные хранимые процедуры выполняют вычислительные задачи, которые сложно выразить на языке Transact-SQL. Такие хранимые процедуры могут быть преобразованы в функции CLR и могут использовать описанные выше преимущества. Более того, расширенные хранимые процедуры, возвращающие результирующие наборы, обращаясь к внешнему источнику, например файлу или веб-службе, могут быть преобразованы в возвращающие табличное значение функции CLR. Дополнительные сведения см. в разделе Создание функций CLR.