Функция внутри функции TSQL - PullRequest
5 голосов
/ 08 июля 2010

Можно ли вызвать скалярную функцию в табличной функции?

Спасибо

1 Ответ

5 голосов
/ 08 июля 2010

Да, до тех пор, пока табличная функция возвращает таблицу после завершения.

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