SQL изменить рекурсивную функцию - PullRequest
0 голосов
/ 27 января 2011

Я использую SQL Server 2008.

Я хочу выполнить ALTER для рекурсивной функции.Изменяющий добавляет параметры, кажется, он задыхается от этого.

Функция не имеет зависимостей, поэтому я могу безопасно выполнить команду DROP + CREATE, но что делать, если функция имеет зависимости?

Это сообщение об ошибке

Сообщение 8144, уровень 16, состояние 2, сервер TESTSERVER, процедура fn_IsOwnerFunction, строка 177 Процедура или функция dbo.fn_IsOwnerFunction имеет слишком много аргументов.

Сообщение появляется несколько раз, каждый раз для строки, где функция ссылается на себя.Примечание: это относится к его новой версии, которая имеет больше параметров.После DROP + CREATE скрипт ALTER работает без ошибок.

Ответы [ 2 ]

1 голос
/ 27 января 2011

Если ошибка «слишком много аргументов указано», то ваш вызывающий код передает слишком много параметров.Это может означать, что оператор ALTER FUNCTION, который вы запускали ранее, фактически не обрабатывался полностью.Это может быть из-за синтаксической ошибки или чего-то подобного.Запустите оператор Alter еще раз и проверьте там сообщение об ошибке.

EDIT:

Добавьте оператор DROP FUNCTION перед оператором CREATE FUNCTION:

if exists (select * from information_schema.routines Where routine_name = 'udf_FunctionName') 
drop function udf_FunctionName
GO

CREATE FUNCTION [dbo].[udf_FunctionName]

... 
1 голос
/ 27 января 2011

Можно удалить функцию, которая используется из других функций или хранимых процедур.Конечно, после удаления / создания функции вам нужно изменить функции и хранимые процедуры, которые используют функцию для добавления новых параметров.

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