Удаление определяемых пользователем функций

Область применения:SQL ServerAzure SQL Database

Вы можете удалить пользовательские функции в SQL Server с помощью SQL Server Management Studio или Transact-SQL.

ограничения

  • Вы не сможете удалить функцию, если в базе данных есть функции Transact-SQL или представления, ссылающиеся на эту функцию и созданные с помощью SCHEMABINDING, или если вычисляются столбцы, ограничения CHECK или ограничения DEFAULT, ссылающиеся на функцию.

  • Вы не сможете удалить функцию, если есть вычисляемые столбцы, ссылающиеся на эту функцию и индексированные.

Разрешения

Необходимо разрешение ALTER на схему, которой принадлежит функция, или разрешение CONTROL на функцию.

Использование среды SQL Server Management Studio

  1. Выберите знак плюса рядом с базой данных, содержащей функцию, которую вы хотите изменить.

  2. Выберите знак плюса рядом с папкой Programmability .

  3. Выберите знак плюса рядом с папкой, содержащей функцию, которую вы хотите изменить:

    • Table-valued Function
    • Скалярная функция
    • Агрегатная функция
  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
    

См. также