My question: is an SQL function that returns table data as efficient as an equivalent stored procedure?
Да, базовый код будет происходить в TSQL, который проходит через Оптимизатор запросов таким же образом, поэтому для «эквивалентности эффективности» это должно быть твердое «да».Однако некоторые вещи в пользу табличной функции, особенно если функция может быть встроенной (внешние фильтры включены в запрос внутри функции).
В то время как SP, который генерирует набор результатов (или несколько), можеттолько входные данные из параметров, встроенная табличная функция может вводить дополнительные фильтры из внешнего запроса.Учтите это:
create function dbo.testif() returns table as return
select * from information_schema.columns
и запрос
select * from dbo.testif() where TABLE_NAME like 'S%'
Условие TABLE_NAME наподобие 'S%' фактически введено в запрос внутри функции, которую выневозможно сделать с помощью хранимой процедуры.