Создать рекурсивную скалярную функцию в SQL - PullRequest
0 голосов
/ 04 сентября 2018

Мне нужна рекурсивная скалярная функция в SQL Server 2014. Мой код такой:

CREATE FUNCTION Accounting_ToppestLevelID 
(
    @ID numeric(6,0)
)
RETURNS numeric(6,0)
AS
BEGIN
    declare @temp numeric(6,0)
    select @temp = a.ParentID from Accounting_AcntAccount a where a.ID = @ID
    if @temp is null
    begin
        return @ID
    end
    return Accounting_ToppestLevelID(@temp)
END

Но после выполнения кода ниже появится сообщение об ошибке:

Msg 195, Level 15, State 10, Procedure Accounting_ToppestLevelID, Line 34
'Accounting_ToppestLevelID' is not a recognized built-in function name.

Это логическая ошибка, но как я могу это исправить?

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Попробуйте добавить префикс схемы, например.

return dbo.Accounting_ToppestLevelID(@temp)
0 голосов
/ 04 сентября 2018

Попробуйте добавить схему явно. Если вы не используете пользовательский, по умолчанию используется dbo:

return [dbo].[Accounting_ToppestLevelID](@temp);
0 голосов
/ 04 сентября 2018

Вы должны просто указать полное имя функции: оно неявно создается в dbo схема, если схема не указана, поэтому ваш скрипт должен быть:

CREATE FUNCTION Accounting_ToppestLevelID 
(
    @ID numeric(6,0)
)
RETURNS numeric(6,0)
AS
BEGIN
    declare @temp numeric(6,0)
    select @temp = a.ParentID from Accounting_AcntAccount a where a.ID = @ID
    if @temp is null
    begin
        return @ID
    end
    return dbo.Accounting_ToppestLevelID(@temp)
END
...