いくつかの権限が間違っている必要がありますが、その方法がわかりません。次のコードは単純化されていますが、これを機能させることさえできません
CREATE FUNCTION ufTest
(
@myParm int
)
RETURNS int
AS
BEGIN
DECLARE @Result int
SELECT @Result = @myParm + 1
RETURN @Result
END
GO
次に、ストアドプロシージャから関数を呼び出せるようにしたいだけです。
CREATE PROCEDURE dbo.[uspGetGroupProfileService]
@id int
AS
BEGIN
SET NOCOUNT ON;
DECLARE @otherId int;
SET @otherId = dbo.ufTest(@id);
END
SQLServerは、dbo.ufTest
が見つからないことを通知し続けます。 [DB]\Programmability\Functions\Scalar-valued Functionsの下に表示されますが、使用方法がわかりません。
誰かが私が間違っていることを知っていますか?
[〜#〜]編集[〜#〜]
以下で選択した回答に示されているように、SSMSIntellisenseを常に信頼できるとは限りません。スクリプトを実行する以外に試すことができることの1つは、CTRL + SHIFT + Rを使用してIntellisenseを強制的に更新することです。
私のために働きます。
CREATE FUNCTION dbo.ufTest ...
をお試しください
デフォルトのスキーマをdbo
にすることはできず、最終的には別のスキーマになると思います。そうでなければ、私が考えることができる唯一の説明は、あなたがそれに許可を与える必要があるかもしれないということです。
まったく同じ問題があり、SQL Server ManagementStudioを再起動するだけで修正されました。
他の誰かがすべてを正しく行い、それでも彼の関数を呼び出すことができない場合に備えて、これを投稿するだけです。
UDFのスクリプトを作成し、スキーマ名を確認します。おそらくdboではありません。特にdboを含めるようにUDF定義を変更します。言い換えると:
CREATE FUNCTION dbo.ufTest
これがエラーであり、このコラムのすべてのアドバイスも失敗するという問題が発生しました。
関数宣言タイプとそのタイプの使用法を再確認してください。
戻り値の型のテーブルを宣言し、Select functionName()
を使用する必要がある場所でSELECT * FROM functionName()
を使用して呼び出しようとしました。
上記のいずれか、特に@ jrdev22の回答が役に立たなかった場合(そして理由がわからなくなった場合)の最後の手段として、SQL Serverを再起動しますservicein Configuration Manager SSMSを単独で再起動しても、すべてがリセットされない場合があるため(たとえば、新しいログインインスタンスを作成するが、それを使用してログインできない場合と同様) 。
SQL Server Configuration Manager> SQL Server Services > SQL Server > Restart
作成したばかりの関数が見つからない場合は、2つの理由があります。
この場合、SQLサーバーを閉じて再度開くだけで、関数が表示されるはずです。
クエリエディタのバグのようです。関数はツリーの適切な場所に表示されますが、関数にdbo.xxxxxxという名前を付けても、新しいセッションを閉じて開くまでクエリエディターに表示されません。その後、dboと入力すると表示されます。
関数の名前を変更すると、古い存在しない関数は使用できますが、新しい名前は使用できません。更新では、セッションを閉じて新しいセッションを開始するだけでは修正されません。
これがバグである可能性があると私が言う理由は、Table関数のアクセス許可プロパティにスキーマプロパティへの青いリンクが含まれているのに、Scalar関数には含まれていないためです。したがって、回避策があるかもしれない最初の場所でスキーマが設定される方法において、それはより深い嘘のバグである可能性があります。または、作業中のデータベースのスキーマが正しく設定されていない可能性があります。
うまくいけば、他の誰かがこの問題に光を当てることができます。
セットではなくselectで呼び出してみてください。そして、outがdboスキーマに属していることを確認しましたか?