SQL Server 2012 - 无法删除用户定义的函数

时间:2014-04-03 16:19:14

标签: tsql sql-server-2012

以下语法成功创建了用户定义的函数,但不删除它。任何人都可以确定我的错误在哪里吗?

- 示例1 - 标量函数

USE AdventureWorks2012
GO

CREATE FUNCTION Sales.uf_MostRecentCustomerOrderDate (@CustomerID int)
RETURNS
   DATETIME
AS
BEGIN;
    DECLARE @MostRecentOrderDate datetime;

    SELECT @MostRecentOrderDate = MAX(OrderDate)
    FROM Sales.SalesOrderHeader as soh
    Where CustomerID = @CustomerID
RETURN @MostRecentOrderDate
END;
GO

-- Using user defined scalar function
SELECT Sales.uf_MostRecentCustomerOrderDate(29825); -- returns 2008-04-01 00:00:00.000 

-- Delete existing scalar valued function
USE AdventureWorks2012;
GO

-- determines if function exists in database
IF OBJECT_ID (N'Sales.uf_MostRecentCustomerOrderDate', N'IF') IS NOT NULL
    -- deletes function
    DROP FUNCTION Sales.uf_MostRecentCustomerOrderDate;
GO

1 个答案:

答案 0 :(得分:1)

该功能是使用type FN创建的(不是IF,因为您已使用过)。

尝试使用此代码删除它:

-- determines if function exists in database
IF OBJECT_ID (N'Sales.uf_MostRecentCustomerOrderDate', N'FN') IS NOT NULL
    -- deletes function
    DROP FUNCTION Sales.uf_MostRecentCustomerOrderDate;
GO

类型IF代表内联表值函数 - 这不是这里的情况。

类型FN代表标量函数 - 这是。

请参阅TechNet docs on sys.objects,其中还列出了SQL Server目录视图中所有已定义的类型