Поскольку ваша небольшая хранимая процедура ничего не записывает, вы можете просто написать ее как табличную функцию.
Затем вы можете применить функцию ко всему набору данных с помощью APPLY.
(Табличные функции, которые пишутся как INLINE (не мульти-оператор), затем объясняются как макросы, чтобы выполнить их чрезвычайно эффективно. Это идеально подходит для вашего описания, поскольку функция уже будет просто одним оператором SELECT.)
Функция:
CREATE FUNCTION dbo.your_function(@user_id AS INT)
RETURNS TABLE
AS
RETURN
<your query>
1012 *
*
Функция, используемая в запросе внутри вашего большого SP:
SELECT
...,
user_detail.field,
user_detail.degree,
user_detail.degreeyear,
user_detail.programcategory
FROM
...
CROSS APPLY
dbo.your_function(some_table.user_id) AS user_detail
Обычно я использую функции для инкапсуляции запросов и заключаю их в хранимые процедуры, только если ...
1) Мне нужно написать данные. (Функции не могут вставлять, обновлять или удалять)
2) Я хочу создать API-интерфейс для клиентских приложений.