Если вы используете только SQL Server 2005 или новее, не заботитесь о обратной совместимости и можете преобразовать свой код в пользовательскую функцию (а не в сохраненный процесс), тогда вы можете использовать новый «CROSS». APPLY ", который использует синтаксис, очень похожий на тот, который вы хотите. Я нашел здесь краткое вступление (конечно, вы также можете прочитать BOL и MSDN)
Предположим, ваш SP возвращает одно значение с именем out_int , ваш пример может быть переписан как:
SELECT T.id, UDF.out_int
FROM
Table1 T
CROSS APPLY
dbo.fn_My_UDF(T.id) AS UDF
Это будет извлекать каждый «идентификатор» из Таблицы1 и использовать его для вызова fn_My_UDF, результат которого появится в окончательном наборе результатов, кроме исходного параметра.
Вариант "CROSS APPLY" - "OUTER APPLY". Они эквивалентны «INNER JOIN» и «LEFT JOIN», но работают над объединением таблицы и UDF (и вызовом второго одновременно).
Если вы должны (по явному указанию заостренного босса) использовать SP внутри, ну - неудача! Вам придется придерживаться курсоров или попытаться немного обмануть: измените код на UDF и создайте SP-оболочки-оболочки: D.