SQLServer在存储过程中找不到我的用户定义函数函数

Jos*_*sso 15 sql-server stored-procedures user-defined-functions

我必须有一些权限错误,但我无法弄清楚如何.以下代码已简化,但我甚至无法使其工作

CREATE FUNCTION ufTest 
(
    @myParm int
)
RETURNS int
AS
BEGIN
    DECLARE @Result int

    SELECT @Result = @myParm + 1

    RETURN @Result
END
GO
Run Code Online (Sandbox Code Playgroud)

然后我只想从存储过程中调用该函数:

CREATE PROCEDURE dbo.[uspGetGroupProfileService]
@id        int
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @otherId int;
    SET @otherId = dbo.ufTest(@id);
END
Run Code Online (Sandbox Code Playgroud)

SQLServer一直告诉我它无法找到dbo.ufTest.它显示在[DB]\Programmability\Functions\Scalar-valued函数下,但我无法弄清楚如何使用它.

有谁知道我做错了什么?

编辑

如下面所选答案所示,您无法始终信任SSMS Intellisense.除了尝试执行脚本之外,您可以尝试的一件事是使用CTRL + SHIFT + R强制进行Intellisense刷新

https://blog.sqlauthority.com/2013/07/04/sql-server-how-to-refresh-ssms-intellisense-cache-to-update-schema-changes/

Mar*_*ith 12

适合我.

尝试 CREATE FUNCTION dbo.ufTest ...

我假设您的默认架构不可能,dbo并且它最终在不同的架构中.否则,我能想到的唯一解释是你可能需要授予它权限.

  • 您可以右键单击用于创建这些对象的帐户下的SSMS中的标量函数,选择"脚本函数作为选择..."填写参数值并单独执行吗?如果是,您可以从同一帐户下的SSMS中的存储过程执行吗?如果是,问题出现在您的应用程序中,您将需要执行`GRANT EXECUTE ON [dbo].[ufTest]`TO` [username]`你也不仅仅想要知道intellisense声称的内容吗? (5认同)
  • +1:2005年也适用于我.如果在其他数据库中创建过程,则该函数将需要三个名称表示法才能正确引用. (2认同)
  • @Martin谢谢!! 它一直很有效.这是SSMS搞砸了我.它强调了函数的调用,说它无法找到它,所以我从来没有打扰过实际尝试运行它. (2认同)