Я могу интерпретировать то, что вы пытаетесь сделать, двумя разными способами.
Сценарий 1:
Вы хотите сначала получить единственное значение из таблицы kp , затем запустить его через статическую функцию, затем передать результат в встроенную функцию и получить таблицу.
В этом случае вы можете сделать что-то вроде:
declare @foo int;
set @foo = (select kp.id from kp where blahblahblah);
select * from MM.test_1(dbo.test_2(@foo))
Сценарий 2:
Скорее всего, для каждой записи в вашей таблице kp вы хотите сделать все эти неприятные вещи с ее идентификатором и union полученными таблицами.
В этом случае лучшее, что я могу предложить, - это какой-то динамический SQL, который просматривает ваши значения идентификатора, используя курсор , вычисляет частичные результаты, а затем объединяет их все вместе. Google для использования курсоров для циклического перемещения по таблицам, и вы найдете достаточно, чтобы начать работу (как этот пост ). Вы должны думать о своей табличной функции как (сюрприз ...) таблица. Вы не можете использовать его в качестве столбца в операторе SELECT так же, как вы можете использовать статическую функцию, а также вы не можете передать поля запроса обратно самим себе.
Если вы вызываете этот SQL из приложения, вам следует серьезно подумать об этом вместо этого в коде.
Удачи!