Один из способов избежать такого рода итераций - это проанализировать код в хранимой процедуре и пересмотреть его так, чтобы вместо обработки для одного набора входов за раз он обрабатывал все наборы входов за раз.Довольно часто это невозможно, поэтому итерационные циклы не так уж редки.
Возможной альтернативой является использование функциональности APPLY (перекрестное применение, внешнее применение).Чтобы сделать это, вы должны переписать процедуру как одну из функций табличного типа и обработать эту функцию в запросе примерно так:
INSERT @tt_hrs
select [columnList]
from #tt_employees
cross apply dbo.PCT_GetEmpTimeFunc(emp_num, @d_start_dt, @d_end_dt, 0, 3, 0, 1)
(Было не ясно, где все ваши входные данные дляПроцедура исходила из.)
Обратите внимание, что вы все еще перебираете вызовы функции, но теперь она "упакована" в один запрос.