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觸發器