SQL Server删除用户定义函数

在本教程中,将学习如何使用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将失败。
此外,如果存在CHECKDEFAULT等约束以及引用该函数的计算列,则DROP FUNCTION语句也将失败。

要删除多个用户定义的函数,请在DROP FUNCTION子句之后指定以逗号分隔的函数名列表,如下所示:

DROP FUNCTION [IF EXISTS] 
    schema_name.function_name1, 
    schema_name.function_name2,
    ...;

SQL Server DROP FUNCTION示例

下面将使用示例数据库中的order_items进行演示:

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触发器