删除用户定义函数
适用于: SQL Server Azure SQL 数据库
可以使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中删除(丢弃)用户定义函数。
限制和局限
如果数据库中存在引用此函数的 Transact-SQL 函数或视图,并且这些函数或视图通过使用 SCHEMABINDING 创建,或者存在引用该函数的计算列、CHECK 约束或 DEFAULT 约束,则将无法删除该函数。
如果存在引用此函数并且已生成索引的计算列,则将无法删除该函数。
权限
需要具有对该函数所属架构的 ALTER 权限,或对该函数的 CONTROL 权限。
使用 SQL Server Management Studio
对于要修改的函数,选择包含该函数的数据库旁的加号。
选择“可编程性”文件夹旁的加号。
对于要修改的函数,选择包含该函数的文件夹旁的加号:
- Table-valued Function
- 标量值函数
- Aggregate 函数
右键单击要删除的函数,然后选择“删除”。
在“删除对象”对话框中,选择“确定”。
选择“删除对象”对话框中的“显示依赖项”,打开“function_name”“依赖项”对话框。 这将显示依赖于该函数的所有对象和该函数依赖的所有对象。
使用 Transact-SQL
在“对象资源管理器”中,连接到数据库引擎的实例。
在标准栏上,选择“新建查询” 。
将以下示例复制并粘贴到查询窗口中,然后选择“执行”。
下面的代码示例将创建一个用户定义函数:
-- 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