在本教學中,將學習如何使用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觸發器