删除用户定义函数

适用于:SQL ServerAzure SQL 数据库

可以使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中删除(丢弃)用户定义函数。

限制和局限

  • 如果数据库中存在引用此函数的 Transact-SQL 函数或视图,并且这些函数或视图通过使用 SCHEMABINDING 创建,或者存在引用该函数的计算列、CHECK 约束或 DEFAULT 约束,则将无法删除该函数。

  • 如果存在引用此函数并且已生成索引的计算列,则将无法删除该函数。

权限

需要具有对该函数所属架构的 ALTER 权限,或对该函数的 CONTROL 权限。

使用 SQL Server Management Studio

  1. 对于要修改的函数,选择包含该函数的数据库旁的加号。

  2. 选择“可编程性”文件夹旁的加号。

  3. 对于要修改的函数,选择包含该函数的文件夹旁的加号:

    • Table-valued Function
    • 标量值函数
    • Aggregate 函数
  4. 右键单击要删除的函数,然后选择“删除”

  5. 在“删除对象”对话框中,选择“确定”

    选择“删除对象”对话框中的“显示依赖关系”,打开“function_name 依赖关系”对话框。 这将显示依赖于该函数的所有对象和该函数依赖的所有对象。

使用 Transact-SQL

  1. 在“对象资源管理器”中,连接到数据库引擎的实例。

  2. 在标准栏上,选择“新建查询” 。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。

    下面的代码示例将创建一个用户定义函数:

    -- creates function called "Sales.ufn_SalesByStore"
    USE AdventureWorks2022;
    GO
    CREATE FUNCTION Sales.ufn_SalesByStore (@storeid int)
    RETURNS TABLE
    AS
    RETURN
    (
        SELECT P.ProductID, P.Name, SUM(SD.LineTotal) AS 'Total'
        FROM Production.Product AS P
        JOIN Sales.SalesOrderDetail AS SD ON SD.ProductID = P.ProductID
        JOIN Sales.SalesOrderHeader AS SH ON SH.SalesOrderID = SD.SalesOrderID
        JOIN Sales.Customer AS C ON SH.CustomerID = C.CustomerID
        WHERE C.StoreID = @storeid
        GROUP BY P.ProductID, P.Name
    );
    GO
    

    下面的代码示例将删除在上一示例中创建的用户定义函数。

    USE AdventureWorks2022;
    GO
    -- determines if function exists in database
    IF OBJECT_ID (N'Sales.fn_SalesByStore', N'IF') IS NOT NULL
    -- deletes function
        DROP FUNCTION Sales.fn_SalesByStore;
    GO
    

另请参阅