在本教程中,将学习如何使用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
删除一个或多个现有的用户定义函数。