Функции SQL и рекурсия - PullRequest
       16

Функции SQL и рекурсия

3 голосов
/ 12 февраля 2009

Предположим, вы пишете функцию в SQL Server, которая условно вызывает себя. Если вы пишете функцию с нуля, завершаете ее и пытаетесь ее создать, SQL Server жалуется.

Жалоба на то, что функция, которую вы вызываете из своей функции, не существует. Конечно, нет, это рекурсивно!

Чтобы реально заставить его работать, вы должны закомментировать рекурсивный вызов, создать функцию, раскомментировать вызов и изменить функцию. Вам придется пройти через эту чепуху, если вы когда-нибудь измените какие параметры принимает функция (в этом случае она жалуется, что в вашем новом рекурсивном вызове слишком много или слишком мало параметров).

Есть ли способ обойти это?

1 Ответ

5 голосов
/ 13 февраля 2009

Для хранимых процедур вы должны получить такую ​​ошибку, которую вы можете просто проигнорировать:

Невозможно добавить строки в sysdepends для текущего объекта, потому что это зависит от отсутствует объект 'sub_proc1'. Объект все еще будет создан.

Для пользовательских функций это немного сложнее, но работает (по крайней мере, для меня это было в SQL 2k8), если вы полностью указали имя функции в рекурсивном вызове.

CREATE FUNCTION recursiveUDF () RETURNS int
AS
BEGIN

    DECLARE @X int

     --Fails with "recursiveUDF is not a recognized built-in function name."
    SET @X = recursiveUDF()          

     --works!
    SET @X = dbo.recursiveUDF()  

    RETURN 1
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...