以下语法成功创建了用户定义的函数,但不删除它。任何人都可以确定我的错误在哪里吗?
- 示例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
答案 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目录视图中所有已定义的类型