我有一个函数和select语句
CREATE FUNCTION dbo.fun_currentday ( @dt DATETIME)
RETURNS DATETIME
AS
BEGIN
DECLARE @currentday DATETIME
SET @currentday = DATEADD(dd, DATEDIFF(dd, 0, @dt), 0)
RETURN (@currentday)
END
GO
DECLARE @pvm AS DATETIME
SET @pvm = GETDATE()
SELECT 'Last 7 days' AS Range, dbo.fun_currentday(@pvm) - 6 AS Stday, dbo.fun_currentday(@pvm) AS Endday
一切正常,但是当我将鼠标悬停在select语句的dbo.fun_currentday上时,我收到错误消息:
Cannot find either column "dbo" or the user-defined function or aggregate "dbo.fun_currentday", or the name is ambiguous.
问题出在哪里?
答案 0 :(得分:4)
智能感知/错误突出显示始终对新创建的对象执行此操作。使用 Ctrl + Shift + R 刷新本地缓存。
答案 1 :(得分:0)
您的存储过程必须存储在某处,因此当您未指定位置时,它将转到默认数据库(master)。所以你应该把它称为
SELECT 'Last 7 days' AS Range,master.dbo.fun_currentday(GETDATE()) - 6 AS Stday, master.dbo.fun_currentday(GETDATE()) AS Endday
已编辑
我已经检查过这个并且我不对,它并不总是适用于mater架构。它在你正在考虑的上下文中转到数据库,所以如果你的创建过程是在根文件夹的查询中创建的,它会转到master,但是如果你在查询测试数据库中创建它,你应该使用test.dbo.fun_currentday(GETDATE())
。为避免它,请始终指定数据库,如USE database_name GO CREATE FUNCTION dbo.fun_currentday
答案 2 :(得分:0)
使用SQL Server 2008 Express,一切运行正常。
您是否尝试在其他数据库上运行查询? 您可以尝试创建新架构并在其中创建UDF。
确保您具有必要的权限,并且dbo架构配置正确。