在本教程中,将学习如何使用SQL Server DROP FUNCTION语句删除现有的用户定义函数。
SQL Server DROP FUNCTION语句简介
要删除CREATE FUNCTION语句创建的用户定义函数,请使用DROP FUNCTION语句,语法如下所示:
DROP FUNCTION [ IF EXISTS ] [ schema_name. ] function_name;
在上面语法中 -
- IF EXISTS选项用于仅在函数存在时删除函数。 否则此语句什么都不做。 如果在未指定- IF EXISTS选项的情况下尝试删除不存在的函数,则会出现错误。
- schema_name指定要删除的用户定义函数所属的模式名称。模式名称是可选的。
- function_name- 指定要删除的函数名称。
注意
如果要删除的函数由视图或使用WITH SCHEMABINDING选项创建的其他函数引用,则DROP FUNCTION将失败。
此外,如果存在CHECK或DEFAULT等约束以及引用该函数的计算列,则DROP FUNCTION语句也将失败。
要删除多个用户定义的函数,请在DROP FUNCTION子句之后指定以逗号分隔的函数名列表,如下所示:
DROP FUNCTION [IF EXISTS] 
    schema_name.function_name1, 
    schema_name.function_name2,
    ...;
SQL Server DROP FUNCTION示例
下面将使用示例数据库中的order_items进行演示:

1. SQL Server DROP FUNCTION  - 一个简单的例子
以下示例创建一个函数,用于根据数量,价格和折扣百分比计算折扣金额:
CREATE FUNCTION sales.udf_get_discount_amount (
    @quantity INT,
    @list_price DEC(10,2),
    @discount DEC(4,2) 
)
RETURNS DEC(10,2) 
AS 
BEGIN
    RETURN @quantity * @list_price * @discount
END
要删除sales.udf_get_discount_amount函数,请使用以下语句:
DROP FUNCTION IF EXISTS sales.udf_get_discount_amount;
2. SQL Server DROP FUNCTION 带有SCHEMABINDING的示例
以下示例使用WITH SCHEMABINDING选项重新创建函数sales.udf_get_discount_amount:
CREATE FUNCTION sales.udf_get_discount_amount (
    @quantity INT,
    @list_price DEC(10,2),
    @discount DEC(4,2) 
)
RETURNS DEC(10,2) 
WITH SCHEMABINDING
AS 
BEGIN
    RETURN @quantity * @list_price * @discount
END
以下语句创建一个使用sales.udf_get_discount_amount函数的视图:
CREATE VIEW sales.discounts
WITH SCHEMABINDING
AS
SELECT
    order_id,
    SUM(sales.udf_get_discount_amount(
        quantity,
        list_price,
        discount
    )) AS discount_amount
FROM
    sales.order_items i
GROUP BY
    order_id;
现在,如果要删除sales.udf_get_discount_amount函数,则会收到错误消息:
DROP FUNCTION sales.udf_get_discount_amount;
SQL Server返回以下错误:
Cannot DROP FUNCTION 'sales.udf_get_discount_amount' because it is being referenced by object 'discounts'.
如果要删除此函数,则必须先删除sales.discounts视图:
DROP VIEW sales.discounts;
然后再删除此函数,如下:
DROP FUNCTION sales.udf_get_discount_amount;
在本教程中,学习了如何使用SQL Server DROP FUNCTION删除一个或多个现有的用户定义函数。
						上一篇:
								SQL Server用户定义函数
												下一篇:
								SQL Server触发器
												
						
						
					
					
					