0

SQLServer2008を使用しています。

再帰関数でALTERを実行したい。変更はパラメータを追加します、それはそれを窒息させるようです。

関数には依存関係がないため、DROP + CREATEを安全に実行できますが、関数に依存関係がある場合はどうすればよいですか?

エラーメッセージはこれです

メッセージ8144、レベル16、状態2、サーバーTESTSERVER、プロシージャfn_IsOwnerFunction、行177プロシージャまたは関数dbo.fn_IsOwnerFunctionに指定された引数が多すぎます。

このメッセージは、関数がそれ自体を参照している行に対して、さらに数回表示されます。注:これは、より多くのパラメーターを持つ新しいバージョンを指します。DROP + CREATEの後、ALTERスクリプトはエラーなしで機能します。

4

2 に答える 2

1

他の関数やストアド プロシージャから使用されている関数を削除しても問題ありません。もちろん、関数をドロップ/作成した後は、関数と、その関数を使用して新しいパラメーターを追加するストアド プロシージャを変更する必要があります。

于 2011-01-27T14:50:30.063 に答える
1

エラーが「指定された引数が多すぎます」である場合は、呼び出し元のコードが渡しているパラメーターが多すぎます。これは、前に実行した ALTER FUNCTION ステートメントが実際には完全に処理されなかったことを意味している可能性があります。これは、構文エラーまたは同様のものが原因である可能性があります。Alter ステートメントを再度実行し、そこでエラー メッセージを確認します。

編集:

CREATE FUNCTION ステートメントの前に DROP FUNCTION ステートメントを追加します。

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

CREATE FUNCTION [dbo].[udf_FunctionName]

... 
于 2011-01-27T14:52:47.143 に答える