Да, до тех пор, пока табличная функция возвращает таблицу после завершения.
Пользовательские функции могут быть вложенными;то есть одна пользовательская функция может вызывать другую.Уровень вложенности увеличивается, когда вызываемая функция начинает выполнение, и уменьшается, когда вызываемая функция заканчивает выполнение.Пользовательские функции могут быть вложены до 32 уровней.Превышение максимальных уровней вложенности приводит к сбою всей цепочки вызывающих функций.Любая ссылка на управляемый код из пользовательской функции Transact-SQL считается как один уровень в сравнении с 32-уровневым пределом вложенности.Методы, вызываемые из управляемого кода, не учитываются в этом ограничении.
http://msdn.microsoft.com/en-us/library/ms186755.aspx
Это очень упрощенно, но работает:
--DROP FUNCTION RETURN_INT
--GO
CREATE FUNCTION RETURN_INT ()
RETURNS INT
WITH EXECUTE AS CALLER
AS
BEGIN
RETURN 1
END
GO
--DROP FUNCTION RETURN_TABLE
--GO
CREATE FUNCTION RETURN_TABLE ()
RETURNS @Test TABLE (
ID INT
)
WITH EXECUTE AS CALLER
AS
BEGIN
INSERT INTO @Test
SELECT DBO.RETURN_INT()
RETURN
END