SQL Server:UDF的问题

时间:2011-03-26 11:36:37

标签: sql sql-server tsql sql-server-2008

我有一个函数和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.

问题出在哪里?

3 个答案:

答案 0 :(得分:4)

智能感知/错误突出显示始终对新创建的对象执行此操作。使用 Ctrl + Shift + R 刷新本地缓存。

之前

Before

After

答案 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架构配置正确。