Я могу вызвать скалярную функцию в табличной функции?
Спасибо
Да, до тех пор, пока возвращающая табличное значение функция возвращает таблицу, когда она завершена.
Пользовательские функции могут быть вложенными; то есть одна пользовательская функция может позвони другому. Уровень вложенности увеличивается, когда вызываемая функция начинает выполнение и уменьшается, когда вызываемая функция завершает работу исполнение. Пользовательские функции могут быть вложенными до 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