我必须有一些权限错误,但我无法弄清楚如何。以下代码已简化,但我甚至无法使其工作
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函数下,但我无法弄清楚如何使用它。
任何人都知道我做错了什么?
修改
如下面所选答案所示,您无法始终信任SSMS智能感知。除了尝试执行脚本之外,您可以尝试的一件事是用CTRL + SHIFT + R强制进行Intellisense刷新
答案 0 :(得分:12)
适合我。
尝试CREATE FUNCTION dbo.ufTest ...
我假设您的默认架构不能是dbo
,并且它最终会以不同的架构结束。否则,我能想到的唯一解释是你可能需要授予它权限。
答案 1 :(得分:3)
编写UDF脚本并检查架构名称。这可能不是dbo。我会将UDF定义更改为专门包含dbo。换句话说:
CREATE FUNCTION dbo.ufTest
答案 2 :(得分:2)
有完全相同的问题,我只需重新启动SQL Server Management Studio即可修复。
只是张贴这个以防万一其他人做的一切都是正确的,但仍然无法调用他的功能。
答案 3 :(得分:1)
作为 last 度假胜地,如果上述任何一个,尤其是@ jrdev22的答案对您没有帮助(并且让您难以理解),请在{中重新启动SQL Server 服务 {3}}因为单独重新启动SSMS有时不会重置所有内容(例如,类似于创建新登录实例但无法使用它登录时)。
SQL Server Configuration Manager> SQL Server Services > SQL Server > Restart
答案 4 :(得分:0)
尝试使用select而不是set来调用它。你检查出来是否属于dbo架构?
答案 5 :(得分:0)
它似乎可能是查询编辑器中的错误。函数在树中出现在正确的位置,但即使命名函数dbo.xxxxxx,函数也不会出现在查询编辑器中,直到您关闭并打开一个新会话,然后如果您键入dbo,它就会出现。
如果更改了该功能的名称,则旧的非现有功能可用,但不能使用新名称。刷新并不能解决此问题,只关闭会话并开始新的会话。
为什么我说这可能是一个错误,因为Table函数的权限属性包含一个指向架构属性的蓝色链接,但是它没有包含标量函数。因此,对于可能存在解决方案的架构设置方式,它可能是一个更深层次的错误。或者,我正在处理的数据库中的模式尚未正确设置。
希望其他人可以对这个问题有所启发。
答案 6 :(得分:0)
如果您无法找到刚刚创建的功能,则有两个原因。
在这种情况下,只需关闭sql server并重新打开它,你应该能够看到该功能。
答案 7 :(得分:0)
我只是遇到一个问题,那就是错误,并且本专栏的所有建议也都失败了。
请确保仔细检查您的函数声明类型和该类型的用法。
我声明了一个返回类型表,并尝试在需要使用Select functionName()
的地方使用SELECT * FROM functionName()
进行调用