Я бы использовал табличную -значную функцию, если бы мне нужно было получить таблицу значений.
Если в ваших выходных данных есть только одна «строка», то было бы предпочтительнее использовать выходные параметры в хранимой процедуре.
Единственным исключением является то, что ваш SP / UDF может быть записан как один оператор SELECT
- т.е. Встроенная функция - потому что SQL Server может оптимизировать работу, если вам когда-нибудь понадобится присоедините его к выводу другого запроса. Возможно, вы этого не делаете сейчас, но написание встроенного UDF означает, что вы не будете застигнуты врасплох медленными запросами патронов и отчетами о превышении времени ожидания, если кто-то начнет использовать его таким образом в будущем.
Если ничего из этого не относится к вам, то я буду использовать хранимую процедуру по изложенным причинам; Вы не хотите создавать иллюзию семантики, основанной на множествах, когда на самом деле их не поддерживаете.